目标:要在应用中点击图片并使其淡出以显示其他图片。
我的方法:要使第一张图片在2000毫秒后淡出,然后将第一张图片的图像资源更改为第二张图片,以使第二张图片出现
我的老师提供了正确的解决方案,因此,我不需要任何正确的解决方案。我想知道的是为什么我的解决方案不起作用,即为什么setImageResource()尽管在开头将Image1设置为Image 2,但在结尾将其调用
这是我创建的淡入淡出功能,在单击image1时会进入
公共无效淡入(查看视图){
ImageView image1 = findViewById(R.id.image1);
image1.animate().alpha(0f).setDuration(2000);
image1.setImageResource(R.drawable.cat2);
}
实际输出:当我单击它时,图像1便变为图像2,然后图像2消失了
问题:尽管在代码末尾调用setImageResource(),但实际上它在开始处设置了图像资源
答案 0 :(得分:1)
您永远不会告诉image1.setImageResource(R.drawable.cat2);
等待2000毫秒并执行,因此image2会在您单击时立即出现。
解决方案:
在2000毫秒后致电image1.setImageResource(R.drawable.cat2);
new Handler().postDelayed(() -> {
image1.setImageResource(R.drawable.cat2);
}, 2000);
这可能有帮助。
答案 1 :(得分:1)
动画在您的代码中是异步的-它不会阻止/等待,而是启动动画(或更确切地说,将要启动的动画排队),然后立即执行下一行,以设置图像。如果要在动画制作完成后更新图像,可以使用withEndAction
并提供回调。
image1.animate()
.alpha(0f)
.setDuration(2000)
.withEndAction(new Runnable() {
@Override
public void run() {
image1.setImageResource(R.drawable.cat2);
}
})
.start();
答案 2 :(得分:1)
我认为这对您有帮助:
Fade In Fade Out Android Animation in Java
因此可以在onClickListener中这样使用:
image1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
image1.setVisibility(View.GONE);
//Animation...
image2.setVisibility(View.VISIBLE);
}
});