Android Animation Alpha

Tengo animación

  
     

y ImageView

  

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

What do I have to change to animate my image from 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 ...

0
No es el caso. Alpha no va a 1. Cuando animo desde 1-> 0.2, funciona bien y se mantiene en 0.2 (utilizo fill after). Cuando quiero animar de 0.2 a 1, se desvanece a casi 0 y va a 0.2
agregado el autor wioskamala, fuente
Para evitar que la vista regrese a 0.2 alfa al final, use el atributo fillAfter : developer.android.com/reference/android/view/animation/…
agregado el autor Jave, fuente
¿Has configurado fillEnabled como verdadero?
agregado el autor Jave, fuente

5 Respuestas

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

So your animation in fact works from 0.04f to 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 su lugar de uno, porque especifica 0.2f como valor marginalmente aceptable en la animación (un tipo de canal alfa máximo).

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 sus LayoutParams en los métodos setFillAfter \ setFillBefore .

0
agregado

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.

0
agregado
Esto funcionó para mí también (editar: mi error, SI tengo interferencia XML: android: alpha = "0"). Voy a jugar un poco con esto, pero necesito empezar desde cero, así que esto funciona por ahora. Gracias.
agregado el autor the_dude_abides, fuente

Prueba esto

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f);
animation1.setDuration(1000);
animation1.setStartOffset(5000);
animation1.setFillAfter(true);
iv.startAnimation(animation1)
0
agregado
El mismo resultado como en mi ejemplo ...
agregado el autor wioskamala, fuente
No quiero eliminar la imagen alfa: se desvanecerá con alpha 0.2. La aplicación está haciendo algunas cosas y, cuando esté lista, quiero que mi imagen esté animada en alfa 1.
agregado el autor wioskamala, fuente
Lo hice de otra manera: en lugar de configurar alfa en diseño o por setAlpha/setImageAlpha, hice la animación 0.2-> 1 y la puse en Crear. Ahora cuando se activa mi animación, va perfectamente desde 0.2-> 1
agregado el autor wioskamala, fuente
Reove alpha de imageview proprties y desaparece de la aplicación desde su dispositivo. limpiar, construir e instalar nuevamente. porque está trabajando mi lado
agregado el autor Vaibhav Agarwal, fuente
Por favor revise que el código editado funcione bien en mi Google nexus 4. Mi alpha de imageview es 0.2 al inicio pero después de aplicar la animación cambió a 1.0 y los cambios persisten.
agregado el autor Vaibhav Agarwal, fuente
ohk ... gracias por la información ... código de aplicación ...
agregado el autor Vaibhav Agarwal, fuente
  

Remove android:alpha=0.2 from XML-> ImageView.

0
agregado

El " setStartOffset " debe ser más pequeño, de lo contrario la animación comienza en la vista alfa 0.xf y espera el desplazamiento inicial 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);
0
agregado