我在我的應用程序中使用了mediacontroller,但它只顯示了3秒鐘。我搜索了很多,但在每個文檔中,我只看到了顯示功能,設置超時,但它沒有效果。我怎樣才能始終顯示媒體控制器?MediaController始終顯示在Android上
我測試過show(0)
,但它沒有效果。
我在我的應用程序中使用了mediacontroller,但它只顯示了3秒鐘。我搜索了很多,但在每個文檔中,我只看到了顯示功能,設置超時,但它沒有效果。我怎樣才能始終顯示媒體控制器?MediaController始終顯示在Android上
我測試過show(0)
,但它沒有效果。
嘗試表演方法是這樣的:
new media controller().show(50000);
而且還要檢查http://developer.android.com/reference/android/widget/MediaController.html#show()。
SudeepSR:請記下這一點,如果您調用show(0),它將顯示媒體控制器,直到調用hide()。
你可以它的一個實例擴展的MediaController類和編程設置爲VideoView類:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.MediaController;
public class MyMediaController extends MediaController {
public MyMediaController(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyMediaController(Context context, boolean useFastForward) {
super(context, useFastForward);
}
public MyMediaController(Context context) {
super(context);
}
@Override
public void show(int timeout) {
super.show(0);
}
}
這裏的用法:
VideoView myVideoView = (VideoView) findViewById(R.id.my_video_view);
MediaController mc = new MyMediaController(myVideoView.getContext());
mc.setMediaPlayer(myVideoView);
myVideoView.setMediaController(mc);
你需要做的是,overrride的在自定義控制器中隱藏方法並且什麼都不做。
public class MyMediaController extends MediaController {
..
@Override
public void hide() {
// Do Nothing to keep the show the controller all times
}
...
}
PS:您仍然需要點擊視頻以顯示媒體控制器。
您還可以創建一個匿名類內聯和重寫隱藏方法有,而不必創建一個全新的類是:
mediaController = new MediaController(this) {
@Override
public void hide() {
//Do not hide.
}
};
爲什麼downvote?解釋下調時的常見禮節 – Gerard 2014-08-20 19:24:25
您可以創建匿名類內聯和重寫某些方法。你需要重寫隱藏方法,並在那裏不做任何事情。您還需要重寫dispatchKeyEvent方法來檢查後退按鍵並調用super.hide()。否則在後面按控制器不會隱藏,並且活動不能關閉。
mediaController = new MediaController(this){
@Override
public void hide() {
// TODO Auto-generated method stub
//do nothing
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
if (mediaPlayer != null) {
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}
super.hide();
Activity a = (Activity)getContext();
a.finish();
}
return true;
}
};
當我覆蓋這些功能時,我的音量控制(在屏幕和設備按鈕上)根本無法使用。 – blackcompe 2014-08-12 13:06:49
最後一篇文章中的代碼(http://stackoverflow.com/questions/23338989/android-overriding-back-button-causes-volume-buttons-stop-working)完美地工作。 – blackcompe 2014-08-12 13:12:02
只有'event.getKeyCode()== KeyEvent.KEYCODE_BACK'返回true。否則'返回false',然後其他設備按鈕將繼續工作 – 2017-03-07 14:09:12
在嘗試了所有我能做到的事情之後,下面的代碼適用於我!
mVideoView = (VideoView) findViewById(R.id.video);
mMediaController = new MediaController(this) {
//for not hiding
@Override
public void hide() {}
//for 'back' key action
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
Activity a = (Activity)getContext();
a.finish();
}
return true;
}
};
mMediaController.setAnchorView(mVideoView);
mMediaController.setMediaPlayer(mVideoView);
mVideoView.setMediaController(mMediaController);
mMediaController.requestFocus();
//only this showed the controller for me!!
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mVideoView.start();
mMediaController.show(900000000);
}
});
//finish after playing
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
finish();
}
});
使用這個,這爲我工作: mediaController.show(0); – ralphgabb 2015-02-24 01:37:33
這可能是一個古老的線程,但仍然沒有答案,試試這個:
final MediaController mediaController = new MediaController(this);
mediaController.setAlwaysDrawnWithCacheEnabled(true);
mediaController.setAnchorView(vView);
mediaController.requestFocus();
vView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaController.show(0);
}
});
vView.setVideoPath(Preview_Path);
vView.setMediaController(mediaController);
vView.start();
那裏有對的MediaController類的註釋中 「秀」 的方法
**Use 0 to show
* the controller until hide() is called**
所以用90萬或較大的值不會幫助。 希望它可以幫助你。
歡呼聲。
試試這個:
videoView.setOnCompletionListener(onVideoCompleted);
videoView.setOnPreparedListener(onVideoPrepared);
mc.setAnchorView(videoView);
mc.setMediaPlayer(videoView);
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
MediaPlayer.OnPreparedListener onVideoPrepared = new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mc.show(0);
}
};
MediaPlayer.OnCompletionListener onVideoCompleted = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mc.hide();
}
};
我想褪色的視頻控制器,並始終顯示它的音頻。這工作
mController = new MediaController(this) {
@Override
public void hide() {
if (mType != TYPE_AUDIO) super.hide();
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
mController.hide();
Activity a = (Activity)getContext();
a.finish();
return true;
}
return false;
}
};
在MediaPlayer中。onPrepared我說:
if (mType == TYPE_AUDIO) mController.show(0);
這使得控制器在音頻播放的開始展現,而不是視頻的播放。
其他手機控制按鈕繼續正常工作。
簡單!在事件隱藏中設置可見性「GONE」,並在顯示中設置可見性「可見」!
MediaController mc= new MediaController(zoom.this){
@Override
public void setMediaPlayer(MediaPlayerControl player) {
super.setMediaPlayer(player);
this.show(4000);
}
@Override
public void show(int timeout) {
super.show(timeout);
this.setVisibility(View.VISIBLE);
}
//instead of press twice with press once "back" button to back
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
Activity a = (Activity)getContext();
a.finish();
}
return true;
}
@Override
public void hide() {
// TODO Auto-generated method stub
super.hide();
this.setVisibility(View.GONE);
//super.show(3000);
}
};
如何在不選擇任何視頻的情況下顯示媒體控制器 - 當然,只有在選擇了視頻後才能正常工作,但要佔用該空間。 – Jasper 2015-01-07 05:45:26