source - MediaController siempre se muestra en Android
videoview android source (10)
¡Fácil! Establezca la visibilidad "GONE" en el evento y oculte la visibilidad "VISIBLE" en show!
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);
}
};
Estoy usando mediacontroller en mi aplicación, pero se muestra solo durante 3 segundos. He buscado mucho, pero en cada documento veo solo la función de mostrar, establece el tiempo de espera, pero no tiene efecto. ¿Cómo puedo mostrar siempre mediacontroller?
He probado el show(0)
, pero no tuvo efecto.
Después de intentar todo lo que pude, el siguiente código funcionó para mí.
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();
}
});
Esto puede ser un hilo viejo, pero aún sin respuesta, intente esto:
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();
Hay un comentario dentro del método "show" de la clase MediaController.
**Use 0 to show
* the controller until hide() is called**
así que usar 900000 o un valor mayor no ayudará. Espero que te ayude.
aclamaciones.
Lo que debe hacer es anular el método de ocultación en el controlador personalizado y no hacer nada.
public class MyMediaController extends MediaController {
..
@Override
public void hide() {
// Do Nothing to keep the show the controller all times
}
...
}
PD: aún debe hacer clic en el video para mostrar el controlador de medios.
Prueba el método show de esta manera:
new media controller().show(50000);
Y también verifique http://developer.android.com/reference/android/widget/MediaController.html#show() .
SudeepSR: Por favor tome nota de eso, si llamó a show (0), mostrará el Media Controller hasta que se llame a hide ().
Prueba esto:
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();
}
};
Puede crear una clase anónima en línea y anular ciertos métodos. Es necesario anular el método de ocultación y no hacer nada allí. También es necesario anular el método dispatchKeyEvent para verificar la pulsación de la tecla Atrás y llamar al super.hide (). De lo contrario, en la parte posterior, presione el controlador que no se ocultará y la actividad no podrá cerrarse.
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;
}
};
Puede extender la clase MediaController y establecer mediante programación una instancia de la misma en una clase 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);
}
}
Aquí está el uso:
VideoView myVideoView = (VideoView) findViewById(R.id.my_video_view);
MediaController mc = new MyMediaController(myVideoView.getContext());
mc.setMediaPlayer(myVideoView);
myVideoView.setMediaController(mc);
Quería desvanecer el controlador para videos y mostrarlo siempre para audio. Esto funciono
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;
}
};
En MediaPlayer.onPrepared he añadido:
if (mType == TYPE_AUDIO) mController.show(0);
Esto hace que el controlador se muestre al inicio de la reproducción de audio, pero no la reproducción de video.
Los otros botones de control del teléfono continúan funcionando normalmente.
También puede crear una clase anónima en línea y anular el método de ocultar allí en lugar de tener que crear una clase completamente nueva para él:
mediaController = new MediaController(this) {
@Override
public void hide() {
//Do not hide.
}
};