2010-11-18 31 views
20

Quiero que una imagen se mueva horizontalmente. es decir, la imagen debe moverse desde la esquina inferior izquierda hasta la esquina inferior derecha una vez. No es necesario regresar al extremo izquierdo esquina inferior.translate animation

La pieza de código que probé era

<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator"> 

<translate android:fromXDelta="0%p" android:toXDelta="200%p" 
android:duration = "2000"/> 
</set> 

este mueve la imagen de izquierda hasta la derecha. Pero está llegando nuevamente al lado izquierdo. ¿Alguien puede decirme cómo solucionar esto?

Respuesta

40

Lo tengo ... en lugar de usar ese archivo xml de animación, escribí dentro del archivo java.

Animation animation = new TranslateAnimation(0, 500,0, 0); 
animation.setDuration(1000); 
animation.setFillAfter(true); 
myImage.startAnimation(animation); 
myImage.setVisibility(0); 

Ahora la imagen se mueve de izquierda a derecha y luego se vuelve invisible ... por lo tanto, animada !!! :)

+1

No sé por qué funciona ese código. No tiene mucho sentido. Intenta usar 'View.VISIBLE' en el método' setVisibility() '. – Macarse

+0

setVisibility (0) a veces no funciona ... no sé y ... He mantenido View.INVISIBLE ahora, que funciona ........ – Mathew

+6

en realidad, INVISIBLE es int == 1, VISIBLE == 0, ido == 2, [aquí] (http://developer.android.com/reference/android/view/View.html#attr_android:visibility) ** Yo también tuve problemas con setVisibility en el código, así que puse View.VISIBLE/View.INVISIBLE in .setVisibility ** – xxxxxxxxxadfas

69

Usted ha sido víctima de la gran malentendido todo el mundo hace primero sobre animaciones Android: la animada ImageView (o cualquier tipo de visión) es no mover realmente (o escala o se gira o desvanecimiento). Es todo un truco ... una animación es esencialmente algunas instrucciones de último minuto para que el motor de composición de pantalla pueda compensar la vista por x/y, rotar por z, etc. La posición/tamaño/ángulo/alfa de la vista nunca cambia realmente.

Por lo tanto, cuando finaliza la animación, su imagen parece volver al punto de partida, porque en realidad nunca la dejó.

Dicho esto, puede lograr lo que quiere de una manera sencilla agregando android:fillAfter="true" a su etiqueta <translate>. Solo tenga en cuenta que la imagen no se ha movido realmente realmente. Si necesita actualizar su diseño al final de la animación, conecte un AnimationListener y hágalo en onAnimationEnd().

+1

Hola Reuben, probé con android: fillAfter = "true" ... pero es lo mismo que antes ... luego probé con onAnimationEnd(). Visité la imagen como invisible ... pero aún está sucediendo lo mismo ... ¿Alguna pista sobre lo que hice mal? – Mathew

+1

Probablemente porque estaba usando un pero apenas importa ahora. –

+8

¿Por qué no importa? Algún código habría hecho de esto una respuesta encantadora –

15

Traducir La animación puede cambiar la apariencia visual de un objeto, pero no puede cambiar los objetos. Es decir, si aplica una animación de traducción a una vista, se movería a una nueva posición, pero sus eventos de clic no se dispararían; los eventos click aún se dispararían en su posición anterior.

Esto sucede porque la vista se encuentra todavía en su posición original. Para superar esto, podemos usar ObjectAnimation que realmente mueve un objeto. La animación de objetos es la única animación que realmente mueve un objeto.

Puede crear la animación Traducir mediante ObjectAnimator.

ObjectAnimator transAnimation= ObjectAnimator.ofFloat(view, propertyName, fromX, toX); 
transAnimation.setDuration(3000);//set duration 
transAnimation.start();//start animation 

vista -este es la vista en la que la animación se va a aplicar propertyName-La propiedad está animando. FromX, toX-Un conjunto de valores que la animación animará entre los tiempos.

+2

utilizando su enlace en esta respuesta para conducir el tráfico está mal visto! Sería mejor incluir una cita resumida de ese enlace aquí para evitar la podredumbre del enlace. – t0mm13b

+0

ObjectAnimator se introduce desde Android 11. Por lo tanto, en la versión anterior de Android, debe usar una biblioteca no oficial. Esta es una biblioteca de NineOldAndroids que puede encontrar todas las API de animación de Android 11 y usar con todas las demás versiones de Android: http://nineoldandroids.com/ –