我有一个视频视图,当视频开始时,媒体控制器显示 3 秒。我想隐藏媒体控制器,除非我点击屏幕。我试过了
MediaController mc= new MediaController();
mc.hide();
Videoview.setMediaController(mc);
..
..
..
但它没有用..有什么建议吗?
我有一个视频视图,当视频开始时,媒体控制器显示 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)
不需要指定。
问题是你不能隐藏控制器,直到它完全准备好。
使用 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
:
...
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);
....
现在,控件最初是隐藏的,当用户点击屏幕时它们会按预期显示。