VideoView:如何在播放视频时始终显示MediaController

时间:2016-05-26 10:02:37

标签: android video android-videoview mediacontroller

我有一个非常简单的任务 - 只是为了在VideoView上播放视频时显示播放控件。但我无法解决它。

以下是我用于初始化VideoView和设置MediaController的代码段:

videoView.setVideoURI(Uri.parse(videoUrl));
MediaController mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
videoView.setKeepScreenOn(true);
videoView.setOnPreparedListener(mp -> {
    progress.setVisibility(View.GONE);
    videoView.start();
    mediaController.show(0);
});

事情是mediaController.show(0)没有任何效果。控件只显示3秒然后消失。

此外,我尝试覆盖MediaController的hide()方法:

@Override public void hide() {}

嗯,它有效 - 控件从不隐藏,但不幸的是硬件'回归'按钮停止工作。没有覆盖硬件'返回'第一次点击关闭媒体控件上的按钮,第二次点击 - 按预期将用户带到上一个屏幕。

有没有可行的解决方案?

3 个答案:

答案 0 :(得分:4)

默认情况下,MediaController在3秒内隐藏,因此您需要覆盖hide()以显示MediaController

videoView.setMediaController(new MediaController(this) {
    @Override
    public void hide()
    {
       mediaController.show();
    }

    }); 

videoView.setMediaController(mc);

答案 1 :(得分:4)

如果您尝试按以下方式显示媒体控制器按钮:

    videoView.start();
    mediaController.show(0);

由于某些原因显示(0)被忽略。

但是如果你将show(0)的调用延迟几毫秒,那么它将起作用:

....
public Handler handler = new Handler();
....
videoView.start();
handler.postDelayed(
            new Runnable() {
                public void run() {
                    mediaController.show(0);
                }},
            100);

对我来说看起来有点儿麻烦,如果是设计意图,那就很难记录。

答案 2 :(得分:0)

除了u2gilles的回答之外,我还发现延迟太短导致了#34;播放"显示符号而不是"暂停"符号

将处理程序的延迟修改为~250ms以修复它。