tipos - Android-MediaController de VideoView dentro del diálogo aparece detrás del diálogo
tipos de dialogos en android studio (2)
Tengo un VideoView
dentro de un cuadro de diálogo personalizado, y estoy creando un controlador de medios para VideoView
sobre la marcha y asignándolo a VideoView
en el código; sin embargo, el controlador no aparece en realidad sobre el video: ¡aparece detrás del cuadro de diálogo! ¿Alguna idea de cómo obtener el controlador por encima del video?
Creé una clase de asistente de diálogo estático para ayudar a construir los cuadros de diálogo personalizados:
public class DialogHelper {
public static Dialog getVideoDialog(Context context, Uri videoLocation, boolean autoplay) {
final Dialog dialog = getBaseDialog(context,true, R.layout.dialog_video);
((Activity)context).getWindow().setFormat(PixelFormat.TRANSLUCENT);
final VideoView videoHolder = (VideoView) dialog.findViewById(R.id.video_view);
videoHolder.setVideoURI(videoLocation);
//videoHolder.setRotation(90);
MediaController mediaController = new MediaController(context);
videoHolder.setMediaController(mediaController);
mediaController.setAnchorView(videoHolder);
videoHolder.requestFocus();
if(autoplay) {
videoHolder.start();
}
videoHolder.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
dialog.dismiss();
}
});
return dialog;
}
/**
* Creates a simple dialog box with as many buttons as you want
* @param context The context of the dialog
* @param cancelable whether the dialog can be closed/cancelled by the user
* @param layoutResID the resource id of the layout you want within the dialog
*
* @return the dialog
*/
public static Dialog getBaseDialog(Context context, boolean cancelable, int layoutResID) {
Dialog dialog = new Dialog(context, R.style.Theme_PopUpDialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(cancelable);
dialog.setCanceledOnTouchOutside(cancelable);
dialog.setContentView(layoutResID);
return dialog;
}
}
Entonces en mi Activity
solo tengo esto para crear mi diálogo:
Dialog videoDialog = DialogHelper.getVideoDialog(context, Uri.parse("http://commonsware.com/misc/test2.3gp"), true);
videoDialog.show();
Esto me funciona
en el diseño xml hacer cambios como este,
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<VideoView
android:id="@+id/videoview"
android:layout_width="640dp"
android:layout_height="400dp"
android:layout_centerInParent="true" >
</VideoView>
<FrameLayout
android:id="@+id/videoViewWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
</FrameLayout>
</RelativeLayout>
en tu dilog,
mVideoView = (VideoView) view.findViewById(R.id.videoview);
en esto, la vista de video usa el oyente setOnPreparedListener y establece el controlador de medios,
mVideoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(MediaPlayer mp,
int width, int height) {
/*
* add media controller
*/
mc = new MediaController(MainActivity.this);
mVideoView.setMediaController(mc);
/*
* and set its position on screen
*/
mc.setAnchorView(mVideoView);
((ViewGroup) mc.getParent()).removeView(mc);
((FrameLayout) findViewById(R.id.videoViewWrapper))
.addView(mc);
mc.setVisibility(View.VISIBLE);
}
});
mVideoView.start();
}
});
Sugiero que debe usar una Activity
lugar de un Dialog
. Establezca su tema de Activity
para emular un Dialog
en el manifiesto.
Ejemplo - AndroidManifest.xml:
android:theme="@android:style/Theme.Dialog"
Luego, podrá mostrar una VideoView
como en los ejemplos.