我有视频视频,当视频开始时,媒体控制器显示3秒钟 . 我想隐藏媒体控制器,除非我点击屏幕 . 我试过了
MediaController mc= new MediaController(); mc.hide(); Videoview.setMediaController(mc); .. .. ..
但它没有用..有什么建议吗?
这实际上并不是隐藏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; } }
不需要指定 videoView.setMediaController(null) .
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); } }
不幸的是,这是 VideoView 中的硬编码行为:
VideoView
... if (mTargetState == STATE_PLAYING) { start(); if (mMediaController != null) { mMediaController.show(); } ...
作为一种解决方法,将 MediaController 包装在您自己的类中并禁止初始 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
MyMediaController mc = mediaController = new MyMediaController(this); mc.setAnchorView(videoView); mc.setMediaPlayer(videoView); videoView.setMediaController(mc); ....
现在,控件最初是隐藏的,当用户点击屏幕时,它们会按预期显示 .
3 回答
这实际上并不是隐藏MediaController的解决方案,但是如果你想完全摆脱这件事,那就这样做:
您最初可以通过上面的操作隐藏它,然后当您想要它(onClick或onTouch或其他)时,只需创建一个新的MediaController并将其设置在videoView上 . 我添加了一个布尔值来防止动作多次发生 .
不需要指定
videoView.setMediaController(null)
.问题是你无法隐藏控制器,直到它完全准备好 .
使用OnPreparedListener并在回调onPrepared中直接进行隐藏,例如:
不幸的是,这是
VideoView
中的硬编码行为:作为一种解决方法,将
MediaController
包装在您自己的类中并禁止初始show()
调用,如下所示:然后,像往常一样简单连接上面的
MyMediaController
,例如:现在,控件最初是隐藏的,当用户点击屏幕时,它们会按预期显示 .