首页 文章

android:隐藏媒体控制器功能

提问于
浏览
2

我有视频视频,当视频开始时,媒体控制器显示3秒钟 . 我想隐藏媒体控制器,除非我点击屏幕 . 我试过了

MediaController mc= new MediaController();
mc.hide();
Videoview.setMediaController(mc);
..
..
..

但它没有用..有什么建议吗?

3 回答

  • 0

    这实际上并不是隐藏MediaController的解决方案,但是如果你想完全摆脱这件事,那就这样做:

    videoView.setMediaController(null);
    

    您最初可以通过上面的操作隐藏它,然后当您想要它(onClick或onTouch或其他)时,只需创建一个新的MediaController并将其设置在videoView上 . 我添加了一个布尔值来防止动作多次发生 .

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            if (controllerCreated == false) {
                videoView.setMediaController(mc);
                mc.show();
                controllerCreated = true;
            }
            return true;
        } else {
            return false;
        }
    }
    
  • 1

    不需要指定 videoView.setMediaController(null) .

    问题是你无法隐藏控制器,直到它完全准备好 .

    使用OnPreparedListener并在回调onPrepared中直接进行隐藏,例如:

    @Override
    public void onPrepared (MediaPlayer mp) 
    {
        int childs = mediaController.getChildCount();
        for (int i = 0; i < childs; i++)
        {
            View child = mediaController.getChildAt (i);
            child.setVisibility (View.GONE);
        }
    }
    
  • 5

    不幸的是,这是 VideoView 中的硬编码行为:

    ...
    if (mTargetState == STATE_PLAYING) {
        start();
        if (mMediaController != null) {
            mMediaController.show();
        }
    ...
    

    作为一种解决方法,将 MediaController 包装在您自己的类中并禁止初始 show() 调用,如下所示:

    package pkg.your;
    
    import android.content.Context;
    import android.widget.MediaController;
    
    public class MyMediaController extends MediaController {
    
        private boolean suppressed = true;
    
        public MyMediaController(Context context) {
            super(context);
        }
    
        @Override
        public void show(int timeout) {
            if (! suppressed) {
                super.show(timeout);
            }
            suppressed = false;
        }
    }
    

    然后,像往常一样简单连接上面的 MyMediaController ,例如:

    MyMediaController mc = mediaController = new MyMediaController(this);
    mc.setAnchorView(videoView);
    mc.setMediaPlayer(videoView);
    videoView.setMediaController(mc);
    ....
    

    现在,控件最初是隐藏的,当用户点击屏幕时,它们会按预期显示 .

相关问题