studio property changes animate android animation view android-animation alpha

property - Android no anima alfa si es inicialmente cero



objectanimator view android (5)

Estoy tratando de animar alpha de una vista de Android (dos animaciones, ambas se desvanecen y desaparecen). Todo funciona bien si el alfa de la vista es inicialmente 1, de forma predeterminada. Sin embargo, inicialmente quiero que la vista sea transparente, por lo que he establecido que es alfa en cero:

indicatorContainer.setAlpha(0);

Ahora, las animaciones no funcionarán. Nunca se hará visible. Si comento esa línea, la vista se muestra inicialmente (lo que no quiero), pero mis animaciones funcionan bien cuando las invoco. Pensé que es algo trivial pero aparentemente no lo es. ¿Qué estoy haciendo mal?

ACTUALIZACIÓN: También probé un punto flotante 0f lugar de un entero 0 después de leer algunos cambios de API relacionados con el método setAlpha , pensando que mi llamada podría estar llamando a la sobrecarga incorrecta, pero nada cambió.


Así es como pude resolverlo un poco, no es especialmente elegante, pero manejable :

  1. Establezca la vista en el alfa inicial que desea 0.0f o de otro modo.

  2. Cuando ocurre un evento en el que necesita que la vista tenga más (o menos) visibilidad / alfa, por ejemplo, justo antes de comenzar una animación, en ese momento puede actualizar el alfa y luego ejecutar la animación en la vista.

Sigo teniendo algunos problemas cuando la animación se repite, pero este enfoque podría funcionar en escenarios donde la animación no se repita


Esto podría ser irrelevante para el OP, pero pensé que lo compartiría independientemente, ya que podría ayudar a alguien en el futuro.

Tenga en cuenta que si su animación inicial combina animate().alpha(0.0f) con una manipulación de la traducción del eje Y o X de la Vista (por ejemplo, animate().translationYBy(500) , debe restablecer esta propiedad antes de desvanecerse de nuevo en (usando animate().alpha(1.0f) .

Me encontré con este post de SO que pensaba que la configuración del alfa de nuevo a 1.0f estaba fallando cuando en realidad aún estaba funcionando como debería, pero la animación se estaba produciendo fuera de la pantalla porque no había restablecido mi traducción del eje Y doh * momento ).

Fácilmente, para resolver este problema fácilmente, puede agregar un AnimatorEndListener a su animación para cuando termine (como @Nikhil Verma mencionado anteriormente) donde puede agregar una sola línea de código para restablecer la traducción del eje X / Y.

En el escenario que enfrenté, quería que la animación flotara hacia abajo y se desvaneciera, así que ajusté el eje Y y el alfa en consecuencia. Después de que flotó y se desvaneció, configuré un Oyente para restablecer la traducción del eje Y de esta manera:

loadingMask.animate().translationYBy(500); //starts animation by moving it down the screen loadingMask.animate().alpha(0.0f) //fades out .setDuration(1500) //over 1.5s .setListener(new AnimatorEndListener() { //when animation completes @Override public void onAnimationEnd(Animator animation) { loadingMask.setTranslationY(0); //reset the y axis translation } });

Ahora, cuando quiero que la animación se repita de nuevo, puedo configurar el alfa de mi Vista en 1.0f y funciona como está previsto.


Intenta algo como esto:

mRelativeLayout.setAlpha(0f); mRelativeLayout.animate().alpha(1f).setDuration(500).setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); mRelativeLayout.setVisibility(View.VISIBLE); //OR mRelativeLayout.setAlpha(1f); } });


Me encontré con el mismo problema en donde indicatorContainer es ImageButton . A continuación el código soluciona este problema muy, muy molesto ...

// XXX: Does not work if just 0. It calls `ImageView#setAlpha(int)` deprecated method. indicatorContainer.setAlpha(0.0f); ViewCompat.animate(indicatorContainer).alpha(1);


Uno puede intentar seguir, de una manera más sencilla:

view.animate (). alpha (1) .setDuration (ANIMATION_DURATION);