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); ... 
  • Cómo crear una animación de diapositivas en Android?
  • Implementación del efecto KenBurns en Android con el ajuste dinámico de mapas de bits
  • Android: ¿Cómo iniciar una animación infinita aplicada en un ImageView después de la actividad con la vista animada se ha reanudado?
  • Cambiar el tamaño de los diseños de forma programática (como animación) hasta "wrap_content"
  • ¿Cómo utilizar el diseño de material de acción barra de navegación de cajón animación de conmutación?
  • Mostrar y ocultar una vista con una animación de diapositiva arriba / abajo
  • Cómo hacer una rotación de imagen suave en Android?
  • Problema de hilo simple con la animación de Android
  • Fondo intermitente
  • Cómo implementar Diseño de materiales Animaciones de superficie coreográficas
  • Expandiendo / Colapsando CardView con un gesto de clic o de deslizamiento (Android)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.