android:隐藏媒体控制器功能

android:隐藏媒体控制器功能,android,android-videoview,mediacontroller,Android,Android Videoview,Mediacontroller,我有一个视频视图,当视频开始时,媒体控制器会显示3秒钟。我想隐藏媒体控制器,除非我点击屏幕。我试过了 MediaController mc= new MediaController(); mc.hide(); Videoview.setMediaController(mc); .. .. .. 但是它不起作用。。有什么建议吗?这并不是隐藏MediaController的真正解决方案,但如果您想彻底摆脱它,请执行以下操作: videoView.setMediaController(null);

我有一个视频视图,当视频开始时,媒体控制器会显示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);
    }
}
@覆盖
已准备好公开作废(MediaPlayer mp)
{
int childs=mediaController.getChildCount();
for(int i=0;i
不幸的是,这是视频视图中的硬编码行为:

...
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);
....

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

将其设置为null是设置videoView.setMediaController(null)的最佳方法;可能会导致NEC Medias(一款日本安卓手机)崩溃,因此您可能希望谨慎行事,并确保进行测试