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



我为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);

最新更新