videos studio source soportado poner para mediaplayer fondo example contenido como android layout videoview

android - studio - Coloque el video dentro de una VideoView



videoview android source (3)

Intenta usar FrameLayout en su lugar. No estoy seguro de por qué, pero si uso un Linear o Relative en mi código, no se centrará, pero Frame sí. Aquí está el XML que encaja mi video en la pantalla, preservando la relación y centrándola:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg"> <!-- Video player --> <VideoView android:id="@+id/surface_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center"> </VideoView> </FrameLayout>

Así que extendí VideoView en onMeasure para escalar el video y adaptarlo a una vista de pantalla completa.

aquí es cómo:

public void setVideoAspect(int w,int h){ wVideo=w; hVideo=h; onMeasure(w, h); } @Override protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if(wVideo!=0 && hVideo!=0) setMeasuredDimension(wVideo,hVideo); }

Llamo a setVideoAspect () con las métricas de visualización (ancho, alto) de la pantalla. El problema es que este método estira el video para que quepa dentro de la pantalla. Quiero ser capaz de mantener la relación de aspecto. (Tengo video 4: 3 y tamaño de pantalla 3: 2.) Usé el siguiente código para mostrar las medidas de relación retenidas a la vista:

int height = (int) (metrics.widthPixels*3/(float)4); int width= metrics.widthPixels; mVideoView.setVideoAspect(width,height);

Así que esto hace el trabajo, pero hay un problema: me da un video 4: 3 con el ancho de la pantalla y escala la altura correctamente, pero no centra el video. (Simplemente recorta la parte inferior del video en lugar de la parte superior e inferior por igual.) Tengo un diseño relativo que contiene la VideoView con la gravedad de la VideoView establecida en el centro.


Para centrar el video en RelativeLayout , agregué tanto layout_gravity="center" ad layout_centerInParent="true" . Funciona en mi teléfono con Android 4.3.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <VideoView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:layout_centerInParent="true" /> </RelativeLayout>


Respuesta de Cameron de forma programática (en caso de que alguien como yo lo necesite) Este código está dentro deCreación de una actividad en mi código (''esto'' a continuación se refiere a la actividad)

FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); FrameLayout fl = new FrameLayout(this); fl.setLayoutParams(lp); VideoView vv = new VideoView(this); FrameLayout.LayoutParams lp2 = new FrameLayout.LayoutParams(lp); lp2.gravity = Gravity.CENTER; vv.setLayoutParams(lp2); fl.addView(vv); setContentView(fl);