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
- Android girar imageview, no puedo establecer la posición final de imageview en onAnimationEnd ()
- ¿Cómo puedo iniciar una actividad desde una ubicación en la pantalla, como en la pantalla de inicio o en las aplicaciones recientes?
- Dibuja animaciones de alta resolución con alta velocidad de fotogramas en Android
- Animar un cuadro de diálogo personalizado
- ¿Cómo modificar la propiedad MaxLines de TextView con animación?
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?
- Cómo cambiar las animaciones utilizadas por el mecanismo de animateLayoutChanges?
- Imagen de Android se desvanece animación
- ¿Cómo implementar TabHost efecto deslizante?
- Implementar un indicador de actividad giratoria similar a iOS en Android
- Cómo quitar el final lento de la animación con ObjectAnimator?
- Makecaleupanimation de appwidget
- Android listview fila eliminación de animación
- ¿Cómo mostrar un cuadro de diálogo en Android con el efecto revelador del diseño de material?
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); ...
- Anotación Java ejecuta un método dentro de la declaración de anotación (uso para android)
- Varios botones de radio de la fila en android?