アプリで mediacontroller を使用していますが、3 秒間しか表示されません。私はたくさん検索しましたが、すべてのドキュメントで show 関数のみが表示され、タイムアウトが設定されていますが、効果はありません。メディアコントローラーを常に表示するにはどうすればよいですか?
テストshow(0)
しましたが、効果はありませんでした。
アプリで mediacontroller を使用していますが、3 秒間しか表示されません。私はたくさん検索しましたが、すべてのドキュメントで show 関数のみが表示され、タイムアウトが設定されていますが、効果はありません。メディアコントローラーを常に表示するにはどうすればよいですか?
テストshow(0)
しましたが、効果はありませんでした。
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);
匿名クラスをインラインで作成し、特定のメソッドをオーバーライドできます。hide メソッドをオーバーライドし、そこで何もしない必要があります。また、戻るキーの押下をチェックして super.hide() を呼び出すために、dispatchKeyEvent メソッドをオーバーライドする必要があります。そうしないと、バックプレスでコントローラーが非表示になり、アクティビティを閉じることができません。
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;
}
};
まったく新しいクラスを作成する代わりに、匿名クラスをインラインで作成し、そこで hide メソッドをオーバーライドすることもできます。
mediaController = new MediaController(this) {
@Override
public void hide() {
//Do not hide.
}
};
次の方法で show メソッドを試してください。
new media controller().show(50000);
また、 http://developer.android.com/reference/android/widget/MediaController.html#show()も確認してください。
SudeepSR: show(0) を呼び出すと、hide() が呼び出されるまでメディア コントローラーが表示されることに注意してください。
必要なことは、カスタム コントローラーで hide メソッドをオーバーライドし、何もしないことです。
public class MyMediaController extends MediaController {
..
@Override
public void hide() {
// Do nothing here in order to always show
}
...
}
PS: メディア コントローラーを表示するには、ビデオをクリックする必要があります。
できる限りのことを試した後、次のコードがうまくいきました!
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();
}
});
これを試して:
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();
}
};