Android - AlphaAnimation - FadeOut ImageView 比 FadeIn 其他 ImageView
Android - AlphaAnimation - FadeOut ImageView than FadeIn other ImageView
我的页面上有一个徽标,在某个事件中我想显示一个错误图像而不是徽标,它转到 FadeOut,然后徽标在 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)
在我的例子中,使用这段代码,问题是永远不会显示应该进入淡出的错误徽标(而进入淡入的原始徽标稍后可以工作)
如果我删除了第二个动画,第一个动画会正确显示。看起来一起,一个接一个,只有第二个被拿走(或者第二个“覆盖”第一个)
使用滑行。
你可以用它来改变动画并用图像做很多工作
implementation 'com.github.bumptech.glide:glide:4.11.0'
DrawableCrossFadeFactory factory =
new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(java.util.Objects.requireNonNull(getActivity()))
.load(R.drawable.logo)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(imageView)
使用此代码
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)
}
目前,唯一接近所需结果的解决方案是:
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)
我马上设置错误图片,然后我必须制作一个处理程序(否则错误图像不会显示),并在处理程序中使用 Glide 重新加载徽标图像
或者,更好:
val factory: DrawableCrossFadeFactory =
DrawableCrossFadeFactory.Builder(800).setCrossFadeEnabled(true).build()
Glide.with(this).load(R.drawable.error)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(imageView)
Handler().postDelayed({
Glide.with(this).load(R.drawable.logo)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(imageView)
}, 800)
同样在这种情况下,第二个动画必须在处理程序内完成,否则第一个动画不会显示
我的页面上有一个徽标,在某个事件中我想显示一个错误图像而不是徽标,它转到 FadeOut,然后徽标在 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)
在我的例子中,使用这段代码,问题是永远不会显示应该进入淡出的错误徽标(而进入淡入的原始徽标稍后可以工作)
如果我删除了第二个动画,第一个动画会正确显示。看起来一起,一个接一个,只有第二个被拿走(或者第二个“覆盖”第一个)
使用滑行。 你可以用它来改变动画并用图像做很多工作
implementation 'com.github.bumptech.glide:glide:4.11.0'
DrawableCrossFadeFactory factory =
new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(java.util.Objects.requireNonNull(getActivity()))
.load(R.drawable.logo)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(imageView)
使用此代码
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)
}
目前,唯一接近所需结果的解决方案是:
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)
我马上设置错误图片,然后我必须制作一个处理程序(否则错误图像不会显示),并在处理程序中使用 Glide 重新加载徽标图像
或者,更好:
val factory: DrawableCrossFadeFactory =
DrawableCrossFadeFactory.Builder(800).setCrossFadeEnabled(true).build()
Glide.with(this).load(R.drawable.error)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(imageView)
Handler().postDelayed({
Glide.with(this).load(R.drawable.logo)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(imageView)
}, 800)
同样在这种情况下,第二个动画必须在处理程序内完成,否则第一个动画不会显示