Ich verwende eine MediaController
, um die Videowiedergabe für meine VideoView
zu steuern. Ich habe VideoView.setOnPreparedListener
überschrieben, so dass die ActionBar/Toolbar
ausgeblendet ist (hide()
), nachdem das Video zuerst Pufferung beendet. Und ich möchte die Symbolleiste auf Comeback, wenn die MediaController
tut. Ich habe versucht, überwiegende die MediaController
show()
und hide()
Methoden, etwa so:Ausblenden und Anzeigen der Symbolleiste auf MediaController show() und hide()
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();
}
});
Dies funktioniert, mit Ausnahme der Steuerelemente für die Wiedergabe zeigt bis zu stoppen! Und natürlich funktioniert das rekursive mMediaController.show()
innerhalb der überschriebenen Methode nicht ... Kann ich meinen Kuchen auch essen?
bearbeiten
So habe auch ich versuchte, unsucessfully Vorteil der VideoView.setOnTouchListener
und VideoView.setOnCompletetionListener
unter:
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();
}
});
Es zeigt, aber es wird nicht wieder verstecken, vielleicht falsch interpretieren ich OnCompletetionListener
?
Edit 2 Von Amir Vorschlag überschreiben ich die onTouch
für VideoView
, nicht perfekt, aber es ist auf wie dem richtigen Weg:
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;
}
});
Diese meist funktioniert, schaltet es die Toolbar
und so manchmal erscheint die Toolbar
ohne die MediaController
, und jedes Mal, wenn ich es umschalte, erscheint die MediaController
es regelmäßig 'für ein paar Sekunden erscheinen und dann verschwinden.' In jedem Fall ist es eine funktionierende Lösung.
Also habe ich das versucht, und es hat nicht funktioniert. Ich habe versucht, den MediaController an mehreren Stellen zu deklarieren, einschließlich vor der onCreate-Methode (um 'final' zu erklären - aber wenn ich das tue, stürzt die App ab, weil sie den Kontext nicht finden kann. Ist das mein Problem? – Nevermore
@Nevermore ist es nicht in Bezug auf den endgültigen Wert: Welcher Teil des Codes verursacht eine Ausnahme?Ich habe diesen Code vor zwei Stunden getestet und funktioniert. – Amir
@Nevermore auch manchmal ** setMediaController ** Ursache Ausnahme setzen Sie es in Versuch fangen. Legen Sie auch Internet-Berechtigung in Manifest fest. – Amir