我为ExoPlayer的Design Custom Seekbar尝试过这个和这个,但没有成功。
我想为ExoPlayer设计自定义拇指和ProgressBar。以下是ExoPlayer的XML,我曾尝试在其中放置seekbar,但它并没有如预期的那样出现。
<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一样进行垂直音量控制。
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) {
}
});
我创建了一个解决方案,它可以工作(至少对我来说是这样),并创建一个垂直的SeekBar。创建这样的Java类希望这能对你有所帮助。
如果我正确阅读了ExoPlayer源代码,您必须保留对准备ExoPPlayer实例时使用的audioRenderer的引用。
exoPlayer.prepare(audioRenderer);
要更改音量,您必须发送以下消息:
exoPlayer.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 0.1f);