2011-11-02 8 views
5

Tengo una barra de herramientas alineada en la parte inferior y una WebView encima, que llenan la altura restante. Ahora quiero deslizarme hacia abajo en la barra de herramientas para ocultarlo, y mientras está animando, la altura de la vista web debería expandirse. Intenté usar TranslateAnimation pero desafortunadamente no está ajustando la posición real de la barra de herramientas, solo se mueven sus contenidos. Esto es lo que he intentado:Android diapositiva animacion

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0%" 
    android:toXDelta="0%" 
    android:fromYDelta="0%" 
    android:toYDelta="100%" 
    android:duration="700" 
    android:fillAfter="true" /> 

Y el código real:

final View v = findViewById(R.id.browseToolbar); 
Animation animation = AnimationUtils.loadAnimation(someContext, R.anim.toolbar_hide); 
v.startAnimation(animation); 

¿Cómo puedo hacerlo?

Respuesta

1

Escribí un código para hacer animaciones de cambio de tamaño reales. Echar un vistazo:

http://www.touchlab.co/blog/resize-animation/

También se fijan en una presentación que hice en la animación Android

https://docs.google.com/present/view?id=djqv5kb_187c62jvbf7

Esencialmente, como se mencionó anteriormente, las clases de animación regulares sólo afectan a lo que está en su vista padre. La clave para entenderlos es que no son "reales". Piensa en la animación de Android como un espejismo. Si ejecuta la aplicación de ejemplo que creé, digamos que hace una animación de escala y hace un botón más pequeño, si hace clic afuera, donde solía estar el botón, aún se registra como un clic de botón. Las animaciones de Android en realidad no afectan los límites y las dimensiones reales.

Lo que el código en mi publicación de blog, esencialmente, es implementar un ViewGroup.OnHierarchyChangeListener. Cuando se agregan/eliminan cosas de la jerarquía, el contenedor anima un cambio de tamaño físico.

+4

http://touchlab.co/blog/resize-animation/ link not working – NetStarter

0

Cuando utiliza la animación de Android, solo se cambian los píxeles de la vista. Para mover realmente la vista, necesitará agregar un oyente de animación al objeto de animación y anular el método onAnimationEnd. En ese método, debes mover la vista de forma programática.

AnimationListener animListener = new AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation arg0) {}    
    @Override 
    public void onAnimationRepeat(Animation arg0) {}     
    @Override 
    public void onAnimationEnd(Animation arg0) { 
     Move the view here   
    } 
}; 

animation.setAnimationListener(animListener); 
Cuestiones relacionadas