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?

One Solution collect form web for “Ejemplo completo de cómo programar RotateAnimations?”

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); ... 
  • Androides ObjectAnimator.ofFloat no funciona correctamente
  • Animación de propiedades de Android
  • Cómo rotar la imagen en particular entre varias imágenes dibujadas en lienzo en android?
  • Combinar dos animaciones en Android
  • Cómo mostrar parte de la imagen en la pantalla al final de la animación
  • Temporizador de rectángulo de dibujo de Android con animación
  • Mover vídeo ... usar animación de traducción
  • FlipAnimation causando problemas en 4.4.3
  • ¿Cómo se suelta un pin en un MapView en Android?
  • Android: ¿Cómo iniciar una animación infinita aplicada en un ImageView después de la actividad con la vista animada se ha reanudado?
  • Android cómo configurar windowanimation mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.