whatwg spec fit content android animation alpha

spec - Android Animation Alpha



html spec (5)

Configurar alfa a 1 antes de comenzar la animación funcionó para mí:

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f); animation1.setDuration(500); iv.setAlpha(1f); iv.startAnimation(animation1);

Al menos en mis pruebas, no hay parpadeo debido a la configuración de alfa antes de comenzar la animación. Simplemente funciona bien.

Tengo animación

<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator"> <alpha android:fromAlpha="0.2" android:toAlpha="1.0" android:duration="500"/> </set>

y ImageView

<ImageView android:id="@+id/listViewIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/settings" android:alpha="0.2"/>

y código:

final Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha); final ImageView iv = (ImageView) findViewById(R.id.listViewIcon); anim .setFillAfter(true); iv.startAnimation(anim);

Así que al principio tengo ImageView con alpha 0.2 y al final quiero tener ImageView con alpha 1. Pero no funciona así - cuando la animación comienza, se agrega más alpha y la animación termina con alpha 0.2

¿Qué debo cambiar para animar mi imagen desde 0.2-> 1?

Lo he comprobado con diferentes configuraciones: configuro android: alpha = "1.0", desde Alpa = "1.0" hasta Alpha = "0.2" funciona como esperaba, desde alfa 1 a 0.2. Parece que alfa de ImageView se multiplica por alfa de animación ...


El " setStartOffset " debería ser más pequeño, de lo contrario la animación se inicia en la vista alfa 0.xf y espera la compensación de inicio antes de animar a 1f . Espero que el siguiente código ayude.

AlphaAnimation animation1 = new AlphaAnimation(0.1f, 1f); animation1.setDuration(1000); animation1.setStartOffset(50); animation1.setFillAfter(true); view.setVisibility(View.VISIBLE); view.startAnimation(animation1);


Hm ...

La cosa está mal, y posiblemente en el correcto funcionamiento de las animaciones en la API de Android.

El hecho es que cuando configuras el código, el valor alfa de 0.2f se basa en la configuración del archivo xml para Android, lo que significa que:

0.2f = 0.2f of 0.2f (20% from 100%) ie from 0.2f / 5 = 0.04f 1f = 0.2f

Entonces, su animación funciona de 0.04f a 0.2f

flag setFillAfter(true) ciertamente funciona, pero debes entender que al final de tu animación, ImageView tendrá el valor alfa 0.2f en lugar de uno, porque especifica 0.2f como valor marginalmente aceptable en la animación (un tipo de alfa máximo) canal).

Por lo tanto, si desea obtener el resultado deseado, deberá llevar toda su lógica a su código y manipular las animaciones en código en lugar de determinar en xml.

Debes entender que tus animaciones dependen directamente de dos cosas:

  • LayoutParams de la vista animada
  • Parámetros de animación

Los parámetros de animación manipulan su LayoutParams en los métodos setFillAfter / setFillBefore .


Prueba esto

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f); animation1.setDuration(1000); animation1.setStartOffset(5000); animation1.setFillAfter(true); iv.startAnimation(animation1);


<ImageView android:id="@+id/listViewIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/settings"/>

Eliminar android:alpha=0.2 de XML-> ImageView.