J'ai un logo sur ma page, avec un certain événement que j'aimerais faire une image d'erreur apparaît à la place du logo, qui va à FADEOUT, puis le logo réapparaît dans Fadein
val errorDrawable = getDrawable(R.drawable.error) imageView.setImageDrawable(errorDrawable) val errorFadeOut = AlphaAnimation(1f, 0f) errorFadeOut.interpolator = AccelerateInterpolator() errorFadeOut.duration = 2000 errorFadeOut.setAnimationListener(object: Animation.AnimationListener{ override fun onAnimationRepeat(animation: Animation?) { } override fun onAnimationEnd(animation: Animation?) { imageView.visibility = View.INVISIBLE } override fun onAnimationStart(animation: Animation?) { } }) imageView.startAnimation(errorFadeOut) val logoFadeIn = AlphaAnimation(0f, 1f) logoFadeIn.interpolator = DecelerateInterpolator() logoFadeIn.startOffset = 2000 logoFadeIn.duration = 1000 val logoDrawable = getDrawable(R.drawable.logo) imageView.setImageDrawable(logoDrawable) logoFadeIn.setAnimationListener(object: Animation.AnimationListener{ override fun onAnimationRepeat(animation: Animation?) { } override fun onAnimationEnd(animation: Animation?) { } override fun onAnimationStart(animation: Animation?) { imageView.visibility = View.VISIBLE } }) imageView.startAnimation(logoFadeIn)
3 Réponses :
Utilisez GLIDE. u peut animer le changement avec et faire beaucoup de travail avec des images
val factory: DrawableCrossFadeFactory = DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build() if(error){ Glide.with(this).load(R.drawable.error) .transition(DrawableTransitionOptions.withCrossFade(factory)) .skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .into(imageView) }else{ Glide.with(this).load(R.drawable.logo) .transition(DrawableTransitionOptions.withCrossFade(factory)) .skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .into(imageView) }
Dans votre cas, vous téléchargez une seule image, dans mon cas, j'ai 2 images, le logo initial, le logo d'erreur à mettre dans FADEOUT et le logo d'origine à remettre à Fadein
@Adamobranz pour que vous puissiez utiliser ce code à nouveau pour une deuxième image et changera avec l'animation. Mettez votre logo d'erreur dans .load ()
@Adamobranz Copiez simplement la dernière partie du code (Glide.with ...)
Même avec la glide, j'ai toujours le problème que j'ai trouvé avec Alphaanimator: Si je place 2 animations, seule la seconde est affichée
@Adamobranz Ce problème avec Glide ?! Je n'ai pas ce problème avec cela, vous devez gérer cela. sa bibliothèque si facile et puissante
Je n'ai pas dit que Glide ne va pas bien. Je viens de dire que même avec glide, je ne peux pas faire 2 animations l'une après l'autre parce que cela ne ferait que la seconde
Résolu avec cela
@Adamobranz Veuillez vérifier la réponse comme réponse correcte TNX.
Pour le moment, la seule solution qui s'approche du résultat requis est la suivante:
imageView.setImageResource(R.drawable.error) Handler().postDelayed({ val factory: DrawableCrossFadeFactory = DrawableCrossFadeFactory.Builder(800).setCrossFadeEnabled(true).build() Glide.with(this).load(R.drawable.logo) .transition(DrawableTransitionOptions.withCrossFade(factory)) .skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .into(imageView) }, 400)
ou, mieux: aussi dans ce cas, la deuxième animation doit être effectuée à l'intérieur d'un gestionnaire, sinon le premier n'est pas affiché p> p> p>