如何为Android中的ExoPlayer设计自定义搜索栏和音量控制

时间:2015-12-22 04:42:11

标签: android seekbar exoplayer

我已经为ExoPlayer的Design Custom Seekbar尝试了thisthis,但没有运气。

我想为ExoPlayer设计自定义拇指和ProgressBar。以下是ExoPlayer的XML,我试图放置搜索栏,但它没有像预期的那样出现。

<com.google.android.exoplayer.AspectRatioFrameLayout
        android:id="@+id/video_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center">

        <SurfaceView
            android:id="@+id/surface_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"/>

        <View
            android:id="@+id/shutter"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/black"/>
        <SeekBar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:thumb="@drawable/thumb"/>

        <com.google.android.exoplayer.text.SubtitleLayout
            android:id="@+id/subtitles"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </com.google.android.exoplayer.AspectRatioFrameLayout>

还有一个问题是我如何为ExoPlayer提供自定义音量控制,就像我们在MXPlayer(音量垂直条)中一样。

更新

我使用此方法获得SeekBar

SeekBar seekBar = (SeekBar) mediaController.findViewById(getResources().getIdentifier("mediacontroller_progress","id","android"));
seekBar.setThumb(getResources().getDrawable(R.drawable.player_thumb));

现在唯一的办法是获得像MXPlayer这样的垂直音量控制。

3 个答案:

答案 0 :(得分:3)

AudioManager有助于处理系统卷。我已使用Seekbar实现了水平音量ExoPlayer来控制音量。只需使用:

创建AudioManager对象:

    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

处理音量增大/减小硬件按钮:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN){
            volumeSeekBar.setProgress(audioManager.getStreamVolume(exoPlayer.getAudioStreamType()));
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP){
            volumeSeekBar.setProgress(audioManager.getStreamVolume(exoPlayer.getAudioStreamType()));
        }
        return super.onKeyUp(keyCode, event);
    }

使用Seekbar处理音量:

volumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                audioManager.setStreamVolume(exoPlayer.getAudioStreamType(), i, 0);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

答案 1 :(得分:2)

我已经创建了一个有效的解决方案(至少对我而言)并创建了一个垂直的SeekBar。 Create Java class like this希望这会对你有帮助。

如果我正确阅读了ExoPlayer源代码,您必须保留对准备ExoPlayer实例时使用的audioRenderers的引用。

$("#ProdutosPedido [id^=produto_]")

要更改音量,您必须发送以下信息:

exoPlayer.prepare(audioRenderer);

答案 2 :(得分:2)

创建AudioManager对象:

private SeekBar seekbar;
AudioManager audioManager;

volumeSeekBar = findViewById(R.id.seekBar);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
volumeSeekBar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
volumeSeekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
volumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
   @Override
   public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
       try {
           audioManager.setStreamVolume(exoPlayer.getAudioStreamType(), i, 0);
          } catch (Exception e) {
               e.printStackTrace();
               audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
         }
                                
   }
                
   @Override
   public void onStartTrackingTouch(SeekBar seekBar) { }
      @Override
      public void onStopTrackingTouch(SeekBar seekBar) { }
   });

增大/减小音量按钮:

   @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN){
            try {
                volumeSeekBar.setProgress(audioManager.getStreamVolume(exoPlayer.getAudioStreamType()));
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP){
            try {
                volumeSeekBar.setProgress(audioManager.getStreamVolume(exoPlayer.getAudioStreamType()));
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        return super.onKeyUp(keyCode, event);
    }