提问人:Imran 提问时间:11/17/2023 最后编辑:Imran 更新时间:11/17/2023 访问量:38
Animate Alpha ImageView 淡入淡出
Animate Alpha ImageView Fade In Fade Out
问:
在视图模型的 observe 方法中,新的 Observer 正在侦听正常工作的 API 响应。但是,根据响应,它调用以下代码来显示成功或失败图像。
此代码位于其自己的方法中,每次应显示图像时都会调用该方法:
我只能让图像显示一次,后续方法调用不会显示任何图像,即使在调试期间我们到达了每一行。
imageView 框在 XML 中正确对齐,最初设置为 gone。(也尝试过隐形)。
imageView.setVisibility(View.VISIBLE); //Fade in imageView.animate().alpha(1).setDuration(1000); if(!successful) { imageView.setImageDrawable(getResources().getDrawable(R.drawable.failed_img)); } else { imageView.setImageDrawable(getResources().getDrawable(R.drawable.success_img)); } //Fade out imageView.animate().alpha(0).setDuration(1500).setStartDelay(1000);
答:
0赞
SnailBird
11/17/2023
#1
我发现你的第二个动画效果是第一个动画。您可以在下面看到,第二个动画应该等待第一个动画完成。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lifecycleScope.launch {
for (i in 0 until 10) {
changeView()
withContext(Dispatchers.IO) {
delay(10_000)
}
}
}
}
private fun changeView() {
binding.apply {
// avoid abruptly appears
imageView.alpha = 0f
imageView.isVisible = true
imageView.animate()
.alpha(1f)
.setDuration(3000)
.start()
/**
* IMPORTANT:
* You should wait the first animation finished,
* then start the second animation.
* Because imageView.animate() method return the SAME Object.
*
* You can add a delay to wait the first animation finished.
* If you don't add a delay, the second config will effect the first animation.
*/
lifecycleScope.launch {
delay(3000)
imageView.animate()
.alpha(0f)
.setDuration(2000)
.start()
}
}
}
评论
0赞
Imran
11/17/2023
我试过设置为不可见并消失了。但它不会第二次再次出现。
0赞
SnailBird
11/17/2023
你最后设置了 alpha = 0 ,那么你就看不到它了。
0赞
Imran
11/17/2023
整个代码位于一个方法中,该方法在成功或失败响应时调用。所以每次都先调用这一行:imageView.animate().alpha(1).setDuration(1000);
0赞
SnailBird
11/17/2023
@Imran 你配置好了动画,但没有启动它。您需要在最后一个调用方法。imageView.animate().alpha(1).setDuration(1000).;imageView.animate().alpha(0).setDuration(1500).setStartDelay(1000)。start()
start()
start()
;
0赞
Imran
11/17/2023
谢谢。我也尝试了有和没有开始,但它仍然没有第二次出现。
0赞
Imran
11/17/2023
#2
只是不会再次出现,可能是因为在后台,它在第二次调用时调用了 onAnimationRepeat。因此,最好的解决方案是在这种情况下直接使用 Animation 类。如果有人能回答为什么原始代码不起作用,我会非常有兴趣了解原因。
Animation a = new AlphaAnimation(1.00f, 0.00f);
a.setDuration(3000);
a.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
public void onAnimationEnd(Animation animation) {
imageView.setVisibility(View.GONE);
}
});
imageView.startAnimation(a);
评论
imageView.setVisibility(View.VISIBLE);