0
votes

Android - Alphaanimation - Fadeout ImageView que FADEIN Autre ImageView

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)


0 commentaires

3 Réponses :


1
votes

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)

}


8 commentaires

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.



0
votes

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)


0 commentaires

0
votes

ou, mieux: xxx

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é


0 commentaires