Estoy tratando de animar el alfa de un botón, que funciona bien cuando configuro el alfa de 1 a 0. Sin embargo, al final de la animación, no puedo restablecerlo de 0 a 1 porque el alfa del botón ya está 1 (y esto hace que el botón simplemente "salte" en la pantalla sin ningún desvanecimiento). Parece que el objeto Animation no establece la vista alfa directamente, sino alguna propiedad de presentación de la vista. ¿Alguien tiene una idea de cómo puedo hacer que esta animación funcione correctamente?

Mi código:

private void performFavoriteButtonFade(boolean isFavorite) {
    AlphaAnimation fadeAnimation = new AlphaAnimation(0, 0);
    if (isFavorite) {
        if (this.favoriteButton.getAlpha() == 1) {
            fadeAnimation = new AlphaAnimation(1, 0);
        }
    } else {
        if (this.favoriteButton.getAlpha() == 0) {
            fadeAnimation = new AlphaAnimation(0, 1);
        } else {
            fadeAnimation = new AlphaAnimation(1, 1);
        }
    }

    fadeAnimation.setDuration(300);
    fadeAnimation.setFillAfter(true);

    this.favoriteButton.startAnimation(fadeAnimation);
    this.favoriteButton.setVisibility(View.VISIBLE);
}
<ImageButton
        android:id="@+id/favoriteButton"
        android:src="@drawable/favorite_icon"
        android:background="@android:color/transparent"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:layout_marginRight="30dp"
        android:layout_marginBottom="20dp"
        android:visibility="invisible"
        android:onClick="didTapNotFavorite"
        />

Notas:

Estoy configurando la visibilidad de la vista debido a la respuesta en esta publicación para que AlphaAnimation funcione correctamente .

3
Tiago Maia 8 feb. 2015 a las 00:20

2 respuestas

La mejor respuesta

Parece que estás usando el antiguo estilo de animación. Puede usar el nuevo estilo y debería funcionar sin cambiar la visibilidad o el relleno después. En lugar de configurar la visibilidad en su XML, simplemente configure el alfa en 0.

Desaparecer:

Button button = new Button(mActivity);
button.animate().alpha(0).setDuration(300).start();

Fundirse:

Button button = new Button(mActivity);
button.animate().alpha(1f).setDuration(300).start();
5
Adam W 7 feb. 2015 a las 21:32

Prueba esto:

AlphaAnimation fadeAnimation;
        if (isFavorite) {
            if (this.favoriteButton.getAlpha() == 1) {
                fadeAnimation = new AlphaAnimation(1, 0);
                fadeAnimation.setInterpolator(new AccelerateInterpolator());
            }
        } else {
            if (this.favoriteButton.getAlpha() == 0) {
                fadeAnimation = new AlphaAnimation(0, 1);
                fadeAnimation.setInterpolator(new DecelerateInterpolator());
            } else {
                fadeAnimation = new AlphaAnimation(1, 1);
            }
        }
0
GIGAMOLE 7 feb. 2015 a las 21:32