Ejemplo completo de cómo programar RotateAnimations?

Quiero tener una animación con varios pasos que se mueven (traducciones) y rotaciones como "recto, girar a la izquierda, recto, …." de un coche.

Puedo hacer esto en un AnimationSet , pero fallo en girar alrededor del centro de mi imagen del coche con el ajuste "RELATIVE_TO_SELF". Se acerca de

 Animation a = new RotateAnimation(0,90,Animation.RELATIVE_TO_SELF,0.5f,... ) 

para este propósito. Sin embargo, la rotación se produce alrededor de la esquina superior izquierda de la pantalla (o lienzo?).

Actualmente estoy resolviendo esto manualmente haciendo un seguimiento de la posición después de cada paso de animación, pero esto es subóptimo.

Sospecho que mi configuración inicial de diseño es falsa:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:layout_height="wrap_content" android:layout_width="fill_parent"> <!-- view that draws some background --> <de.bsd.turtlecar.SampleView android:id="@+id/graph_view" android:layout_height="350px" android:layout_width="fill_parent" android:visibility="invisible" /> <!-- the car --> <ImageView android:id="@+id/car_view" android:src="@drawable/turtle_car" android:layout_height="wrap_content" android:layout_width="wrap_content" android:visibility="invisible"/> </FrameLayout> <Button ... onClick="run" ... /> </LinearLayout> 

Esto muestra el coche en la esquina superior izquierda (debe aparecer en un lugar diferente – básicamente, donde la animación comienza más tarde. Y se debe mover más tarde).

En mi código que se activa a través del botón de ejecución que hago:

  ImageView carView = (ImageView) findViewById(R.id.car_view); print(carView); AnimationSet animationSet = new AnimationSet(true); TranslateAnimation a = new TranslateAnimation( Animation.ABSOLUTE,200, Animation.ABSOLUTE,200, Animation.ABSOLUTE,200, Animation.ABSOLUTE,200); a.setDuration(1000); animationSet.addAnimation(a); RotateAnimation r = new RotateAnimation(0f, -90f,200,200); // HERE r.setStartOffset(1000); r.setDuration(1000); animationSet.addAnimation(r); ... 

Así que en el punto con aquí, la rotación funciona, pero tengo que seguir la pista. Si giro RELATIVE_TO_SELF, la rotación se produce alrededor de (0,0) de la pantalla.

Pregunta adicional: ¿qué puedo hacer para mantener el coche en pantalla después de que la animación haya terminado?

¿O estoy completamente en la pista equivocada?

Intenta agregar setFillAfter (true) a tus animaciones. Eso sin duda mantendrá el coche en su lugar final y puede resolver sus problemas de punto de rotación también

  TranslateAnimation a = new TranslateAnimation( Animation.ABSOLUTE,200, Animation.ABSOLUTE,200, Animation.ABSOLUTE,200, Animation.ABSOLUTE,200); a.setDuration(1000); a.setFillAfter(true); //HERE animationSet.addAnimation(a); RotateAnimation r = new RotateAnimation(0f, -90f,200,200); // HERE r.setStartOffset(1000); r.setDuration(1000); r.setFillAfter(true); //HERE animationSet.addAnimation(r); ... 
  • Traducir animación de arriba a la mitad de la pantalla
  • Efecto Parallax en cada elemento en una vista de reciclador?
  • ¿Cómo encadenar la animación en android a la misma vista?
  • Iniciar múltiples ViewPropertyAnimators al mismo tiempo
  • ViewPager anidado en ViewPager
  • Smooth Progress Bar Animación
  • Objeto de desplazamiento de Android a lo largo de un trazado
  • Cómo animar un elemento de la lista de capas
  • TranslateAnimated ImageView no se puede hacer clic después de la animación
  • ¿Cómo utilizar el diseño de material de acción barra de navegación de cajón animación de conmutación?
  • ¿Es posible hacer el fondo de una aplicación android en un fondo animado como un gif?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.