2011-07-13 58 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); 
.... 

現在,控制最初隱藏,並且顯示在預期,當用戶點擊屏幕。