I'm using a MediaController to control video play back for my VideoView. I've overriden VideoView.setOnPreparedListener so that the ActionBar/Toolbar is hidden (hide()) after the video first finishes buffering. And I'd like the toolbar to comeback when the MediaController does. I've tried overriding the MediaController show() and hide() methods, like so:
mVideoView.start();
// Media Controller
mMediaController = new MediaController(this){
@Override
public void show() {
getSupportActionBar().show();
}
@Override
public void hide() {
getSupportActionBar().hide();
}
};
mMediaController.setAnchorView(mVideoView);
mVideoView.setMediaController(mMediaController);
// Hide toolbar once video starts
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// Hide support bar
getSupportActionBar().hide();
}
});
This works, except the playback controls stop showing up! And of course, calling a recursive mMediaController.show() within the overridden method doesn't work... Can I have my cake an eat it too?
Edit
So I've also, unsucessfully tried taking advantage of the VideoView.setOnTouchListener and VideoView.setOnCompletetionListener:
mVideoView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
getSupportActionBar().show();
return false;
}
});
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
getSupportActionBar().hide();
}
});
It does show, but it won't hide again, perhaps I misinterpret OnCompletetionListener?
Edit 2
From Amir's suggestion, I override the onTouch for VideoView, not perfect, but it's on like the right track:
mMediaController = new MediaController(this);
mVideoView = (VideoView) findViewById(R.id.media_player);
mVideoView.setOnTouchListener(new View.OnTouchListener() {
boolean flag;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
if(flag) {
mMediaController.hide();
getSupportActionBar().hide();
} else {
mMediaController.show();
getSupportActionBar().show();
}
flag = !flag;
return true;
}
return false;
}
});
This mostly works, it toggles the Toolbar and so sometimes the Toolbar will appear without the MediaController, and each time I toggle it, the MediaController does it's regular 'appear for a few seconds and then disappear.' In any case, it is a working solution.
Your original code seems to work if you add calls to the corresponding super methods.
mediaController = new MediaController(this){
@Override
public void show() {
super.show();
getSupportActionBar().show();
Toast.makeText(activity_media_player.this, "SHOW TOOLBAR", Toast.LENGTH_SHORT).show();
}
@Override
public void hide() {
super.hide();
getSupportActionBar().hide();
Toast.makeText(activity_media_player.this, "HIDE TOOLBAR", Toast.LENGTH_SHORT).show();
}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With