2012-01-19 18 views
7

Tengo una actividad cuyo diseño solo contiene una VideoView. Aquí está el xml:¿RelativeLayout hace que la animación no funcione?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 


    <VideoView 
android:id="@+id/videoplayer" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_alignParentRight="true" 
android:layout_alignParentLeft="true" 
android:layout_alignParentTop="true" 
android:layout_alignParentBottom="true" 
> 
</VideoView> 

Estoy tratando de aplicar esta animación en el VideoView después de que se detenga de juego:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromYDelta="0%" android:toYDelta="-100%" android:duration="500"/> 
    <scale 
    android:fromXScale="1.0" 
    android:toXScale="0" 
    android:fromYScale="1.0" 
    android:toYScale="0" 
    android:duration="500" 
    android:pivotX="50%" 
    android:pivotY="0%" 
    /> 

</set> 

Esto funciona perfectamente como se muestra. Pero si cambio de LinearLayout a RelativeLayout en el diseño, entonces la animación ya no funciona y el video simplemente se congela en el último cuadro que se muestra antes de que se detenga.

¿Por qué el tipo de diseño de raíz en mi actividad hace que una animación no funcione correctamente?

EDIT: Para añadir a la rareza si añado este TextView

<TextView 
android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text=" "> 
</TextView> 

Para la RelativeLayout por debajo de la VideoView continuación, la animación va a funcionar. Sin embargo, si quito el espacio del elemento de texto de android: esto vuelve a no funcionar. o.O

EDITAR: He otorgado la recompensa a Beowulf Bjornson por el buen consejo de utilizar el marco de animación más nuevo.

Pero todavía estoy muy interesado si alguien alguna vez se da cuenta de lo que está pasando con las animaciones de estilo antiguo en esta situación, estaría más que feliz de darle algunos puntos más por ello.

+1

¿Cómo se llama a la animación en el código de Java? Por favor, ponlo aquí. Puede ser puede obtener el punto de por qué se congela. –

Respuesta

9

No estoy seguro de si el uso de una biblioteca de terceros es una solución viable para usted, pero recomiendo NineOldAndroids, por lo que puede utilizar las capacidades de animación de 3.0+ en versiones anteriores de Android. Hacen que este trabajo sea mucho más fácil.

Aquí está el enlace: http://nineoldandroids.com/

A continuación, en la actividad que se puede hacer algo tan fácil como:

VideoView view = (VideoView) findViewById(R.id.videoplayer); 
animate(view).scaleX(0).scaleY(0).setDuration(500L); 

Lo he probado usando RelativeLayout y funciona como se esperaba.

EDIT: Si desea utilizar la implementación de nido de abeja nativa, esta API específica es 3.1 + y que debe ser usado nativelly como la siguiente:

view.animate().scaleX(0).scaleY(0).setDuration(500L); 

Y si desea nativelly apoyo 3.0, tendrá que usarlo así:

AnimatorSet set = new AnimatorSet(); 
set.playTogether(
    ObjectAnimator.ofFloat(view, "scaleX", 1.0f, 0.0f), 
    ObjectAnimator.ofFloat(view, "scaleY", 1.0f, 0.0f), 
); 
set.setDuration(500).start(); 
+0

Esa es una biblioteca ordenada, y definitivamente planeo buscarla.Pero ya estoy construyendo el proyecto para Honeycomb, por lo que ya debería tener acceso a la nueva API de animación. Voy a probar el lunes para ver si el uso de la API más nueva solucionará mi problema. – FoamyGuy

+0

Claro. He agregado algunos ejemplos nativos, en caso de que puedan ayudarte :) –

+0

Este es un hallazgo increíble, ¡gracias! +1 (+2 si pudiera) – Rotemmiz

1

No estoy seguro pero en mi aplicación tengo RelativeLayout y Animaion y también el video funciona bien.

Si VideoView es la única vista del diseño, coloque la altura y el ancho relativos del diseño como fill_parent y también para VideoView y luego intente.

Espero que funcione. Si no, házmelo saber.

Cuestiones relacionadas