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); ... 
  • ¿Por qué no funciona setVisibility después de animar una vista?
  • Infinite ObjectAnimator con interpolador ... ¿Cómo acelerar sólo el inicio inicial?
  • Elemento compartido animación entre RecyclerView elemento y CollapsingToolbar dentro de la misma actividad
  • Desafío: Animación personalizada de ViewPager. Cambiar la altura de los elementos elegidos (Ver doble)
  • Pausa de reproducción de Android y problema de reproducción
  • Android - Artefactos utilizando Animación
  • Usando la lista de animación de android
  • ¿Cómo animar un icono para la vista expand / collapse?
  • Animación
  • Android TranslateAnimación restablece después de la animación
  • Fondo animado como la aplicación de despertador Timely
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.