2011-07-13 63 views
2

我有一个videoview,当视频开始时,媒体控制器显示3秒钟。我想隐藏媒体控制器,除非我点击屏幕。我试过android:隐藏媒体控制器功能

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

但它没有工作..有什么建议吗?

+0

你有没有想过? – sinek

回答

5

这是不是真的要隐藏的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; 
    } 
} 
+0

将其设置为null是IMO – Ronnie

+0

设置videoView.setMediaController(null)的最佳方式;可能会导致NEC媒体(日本的Android手机)崩溃,所以你可能希望谨慎行事,一定要测试 –

1

指定videoView.setMediaController(null)没有必要。

问题是你不能隐藏控制器,直到它完全准备好。

使用OnPreparedListener并在回调onPrepared做你的隐藏inderectly,如:

@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); 
    } 
} 
0

不幸的是,这是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); 
.... 

现在,控制最初隐藏,并且显示在预期,当用户点击屏幕。