Quiero tener una animación con varios pasos que hacen movimientos (traducciones) y rotaciones como "recto, gire a la izquierda, recto, ..." de un automóvil.¿Ejemplo completo de cómo programar RotateAnimations?
Puedo hacer esto en un AnimationSet
, pero no puedo rotar alrededor del centro de la imagen de mi coche con la configuración "RELATIVE_TO_SELF". Sé sobre
Animation a = new RotateAnimation(0,90,Animation.RELATIVE_TO_SELF,0.5f,...)
para este propósito. Aún así, la rotación ocurre alrededor de la esquina superior izquierda de la pantalla (¿o lienzo?).
Actualmente estoy resolviendo esto haciendo un seguimiento manual de la posición después de cada paso de animación, pero esto no es óptimo.
Sospecho que mi diseño de la configuración inicial es falso:
<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, en la animación comienza más tarde y debería. muévete 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);
...
Por lo tanto en el punto de aquí, la rotación funciona, pero tengo que seguir la pista. si giro RELATIVE_TO_SELF, la rotación ocurre alrededor de (0,0) de la pantalla.
Pregunta adicional: ¿qué puedo hacer para mantener el automóvil en la pantalla una vez que la animación ha terminado?
¿O estoy completamente en la senda equivocada?
Nota: paso final aquí es llamar 'carView.startAnimation (animationSet);' – Nilzor