Fade In Fade Out Android Animation en Java

Quiero tener una animación de 2 segundos de un ImageView que gasta 1000ms que desvanecen adentro y entonces 1000ms que se descoloran hacia fuera.

Esto es lo que tengo hasta ahora en mi constructor ImageView:

Animation fadeIn = new AlphaAnimation(0, 1); fadeIn.setDuration(1000); Animation fadeOut = new AlphaAnimation(1, 0); fadeOut.setStartOffset(1000); fadeOut.setDuration(1000); AnimationSet animation = new AnimationSet(true); animation.addAnimation(fadeIn); animation.addAnimation(fadeOut); this.setAnimation(animation); 

Cuando ejecuto esa animación, no aparece nada . Sin embargo, cuando elimino una de las animaciones alfa, el comportamiento funciona como se esperaba.

Cosas que ya he probado:

  • Cada combinación concebible de setFillBefore , setFillAfter y setFillEnabled .
  • Agregar un LinearInterpolator al AnimationSet .

Calculó mi propio problema. La solución acabó basándose en interpoladores.

 Animation fadeIn = new AlphaAnimation(0, 1); fadeIn.setInterpolator(new DecelerateInterpolator()); //add this fadeIn.setDuration(1000); Animation fadeOut = new AlphaAnimation(1, 0); fadeOut.setInterpolator(new AccelerateInterpolator()); //and this fadeOut.setStartOffset(1000); fadeOut.setDuration(1000); AnimationSet animation = new AnimationSet(false); //change to false animation.addAnimation(fadeIn); animation.addAnimation(fadeOut); this.setAnimation(animation); 

Sé que esto ya ha sido contestada pero …..

 <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="1000" android:repeatCount="infinite" android:repeatMode="reverse" /> 

Manera rápida y fácil de hacer rápidamente un fundido adentro y hacia fuera con una repetición del uno mismo. Disfrutar

Aquí está mi solución usando AnimatorSet que parece ser un poco más confiable que AnimationSet.

 // Custom animation on image ImageView myView = (ImageView)splashDialog.findViewById(R.id.splashscreenImage); ObjectAnimator fadeOut = ObjectAnimator.ofFloat(myView, "alpha", 1f, .3f); fadeOut.setDuration(2000); ObjectAnimator fadeIn = ObjectAnimator.ofFloat(myView, "alpha", .3f, 1f); fadeIn.setDuration(2000); final AnimatorSet mAnimationSet = new AnimatorSet(); mAnimationSet.play(fadeIn).after(fadeOut); mAnimationSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); mAnimationSet.start(); } }); mAnimationSet.start(); 
 viewToAnimate.animate().alpha(1).setDuration(1000).setInterpolator(new DecelerateInterpolator()).withEndAction(new Runnable() { @Override public void run() { viewToAnimate.animate().alpha(0).setDuration(1000).setInterpolator(new AccelerateInterpolator()).start(); } }).start(); 

Otra alternativa:

No es necesario definir 2 animaciones para fadeIn y fadeOut . FadeOut es el reverso de fadeIn .

Así que puedes hacer esto con Animation.REVERSE como este:

 AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f); alphaAnimation.setDuration(1000); alphaAnimation.setRepeatCount(1); alphaAnimation.setRepeatMode(Animation.REVERSE); view.findViewById(R.id.imageview_logo).startAnimation(alphaAnimation); 

Luego onAnimationEnd :

 alphaAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { //TODO: Run when animation start } @Override public void onAnimationEnd(Animation animation) { //TODO: Run when animation end } @Override public void onAnimationRepeat(Animation animation) { //TODO: Run when animation repeat } }); 

Los conjuntos de animación no parecen funcionar como se esperaba. Al final me di por vencido y utilicé el postDelayed () de la clase Handler para secuenciar animaciones.

Aquí es lo que solía desvanecer en / out Views, espero que esto ayude a alguien.

 private void crossFadeAnimation(final View fadeInTarget, final View fadeOutTarget, long duration){ AnimatorSet mAnimationSet = new AnimatorSet(); ObjectAnimator fadeOut = ObjectAnimator.ofFloat(fadeOutTarget, View.ALPHA, 1f, 0f); fadeOut.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { fadeOutTarget.setVisibility(View.GONE); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); fadeOut.setInterpolator(new LinearInterpolator()); ObjectAnimator fadeIn = ObjectAnimator.ofFloat(fadeInTarget, View.ALPHA, 0f, 1f); fadeIn.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { fadeInTarget.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animator animation) {} @Override public void onAnimationCancel(Animator animation) {} @Override public void onAnimationRepeat(Animator animation) {} }); fadeIn.setInterpolator(new LinearInterpolator()); mAnimationSet.setDuration(duration); mAnimationSet.playTogether(fadeOut, fadeIn); mAnimationSet.start(); } 

Si utiliza Animator para hacer animaciones, puede

Animador (directorio) -> fade_out.xml

 <?xml version="1.0" encoding="UTF-8"?> <objectAnimator android:propertyName="alpha" android:valueFrom="0" android:valueTo="1" xmlns:android="http://schemas.android.com/apk/res/android"/> 

En java

 Animator animator = AnimatorInflater.loadAnimator(context, R.animator.fade_out); animator.setTarget(the_view_you_want_to_animation); animator.setDuration(1000); animator.start(); 

Otra forma de hacer que la animación se desvanezca con sólo código java es

 ObjectAnimator fadeOut = ObjectAnimator.ofFloat(the_view_you_want_to_animation, "alpha", 1f, 0); fadeOut.setDuration(2000); fadeOut.start(); 

También puede utilizar animationListener, algo así:

 fadeIn.setAnimationListener(new AnimationListener() { @Override public void onAnimationEnd(Animation animation) { this.startAnimation(fadeout); } }); 
  • Cómo mover una imagen de izquierda a derecha en android
  • La transición parpadea después del cambio de orientación
  • AnimatedVectorDrawable no anima
  • Iniciar múltiples ViewPropertyAnimators al mismo tiempo
  • La animación de un elemento de vista de lista tiene efecto en varias filas
  • Crear animación de escaneado utilizando el estudio de Android
  • Implementación del efecto KenBurns en Android con el ajuste dinámico de mapas de bits
  • Cambiar la animación del fragmento ya en la pila
  • Cómo restablecer AnimationDrawable
  • Iniciar una nueva actividad sin animación de transición en android 1.6
  • Cómo aumentar la velocidad de rotación en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.