2012-10-10 27 views
6

Estoy completamente perplejo con algo que pensé que sería la cosa más fácil de todas. Intento reproducir un video dentro de un marco en una disposición relativa.Reproducir video en una parte de la pantalla

Tenga en cuenta que la aplicación debe ejecutarse en un dispositivo muy específico (ficha de Internet Archos 101) en modo apaisado, y los videos están codificados previamente con un tamaño muy específico de 480x360, por lo que el diseño tiene algunos arreglos tamaños.

Este es el diagrama

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<!-- Background --> 
<ImageView 
    android:layout_width="980dp" 
    android:layout_height="568dp" 
    android:src="@drawable/bg_video" /> 

<TextView 
    android:id="@+id/video_headtext" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="73dp" 
    android:layout_marginLeft="255dp" 
    android:textColor="#FFFFFF" 
    android:textSize="16dp" /> 

<TextView 
    android:id="@+id/video_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#FFFFFF" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="112dp" /> 

<VideoView 
    android:id="@+id/video_videocontainer" 
    android:layout_width="480dp" 
    android:layout_height="360dp" 
    android:layout_below="@id/video_title" 
    android:layout_marginTop="10dp" 
    android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

me carga el vídeo utilizando este código

player = (VideoPlayer) findViewById(R.id.video_videocontainer); 
player.setVideoURI(videoUri); 

funciona el código, pero mientras que el VideoView es correcta dentro del marco, el vídeo en sí juega en algún lugar del parte superior de la pantalla, y solo una parte se muestra en VideoView.

Ejemplo de lo que ocurre here (Este es solo un video temporal para la depuración). Captura de pantalla del video en el mismo momento here.

Como puede ver, la VideoView solo muestra una parte del video, completando el resto con negro.

Estoy bastante seguro de que me está perdiendo algo realmente simple, pero no puedo entender en absoluto.

Gracias de antemano.

EDIT: He tratado de escribir una clase VideoPlayer que se extiende VideoView y anula onMeasure como esto

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    setMeasuredDimension(480, 360); 
} 

public void changeVideoSize() 
{ 
    getHolder().setFixedSize(480, 360); 

    requestLayout(); 
    invalidate(); 
} 

pero no ayudar a un solo bit.

EDIT 2: Probé con SurfaceView y MediaPlayer, el mismo resultado. Tengo la sensación de que no entendí el principio de reproducir un video en Android. Quedarse estancado aquí.

EDIT 3: He probado un Samsung Galaxy HD y el video muestra correctamente dentro del marco. Me pregunto si esto es un problema con la tableta, o con 2.2?

EDIT 4: AVD que se ejecuta en 2.2 no reproduce el video correctamente. AVD ejecuta 4.1 hace. Supongo que eso lo reduce un poco.

Respuesta

3

Tuve un problema similar con un video que tenía un alto perfil para que se manejara ese dispositivo en particular (2.1) y funcionó bien para Android 4.0.

Aparte de eso, estoy usando SurfaceView y el truco fue agregar oyentes a los eventos para el MediaPlayer (setOnVideoSizeChangedListener en particular) y la devolución de llamada a la superficie vinculada a los eventos del reproductor de medios.

+0

he reescrito con un SurfaceView y ahora estoy frente a algo realmente raro. El video se reproduce fuera de SurfaceView, al igual que con VideoView. Solo que no está recortada y se muestra encima de todo. Incluso cuando uso 'setDisplay (null)', ¡el video aún se muestra! –

+0

¿ha implementado la devolución de llamada del titular de la superficie y ha vinculado los eventos? – petrumo

+0

Logré que el video se posicione un poco mejor después de seguir su ejemplo. No es óptimo y todavía no puedo creer que sea tan difícil posicionar un video dentro de una vista, pero funciona por ahora. ¡Gracias! –

0

Establezca el atributo VideoView setZOrderOnTop en true y vea si funciona. Por ejemplo si tengo una llamada VideoView qvideo todo

qvideo.setZOrderOnTop(true); 
+0

Desafortunadamente eso no cambia nada. –

Cuestiones relacionadas