image.setImageResource()何时在函数内设置图像资源?

时间:2019-05-29 12:07:43

标签: java android

目标:要在应用中点击图片并使其淡出以显示其他图片。

我的方法:要使第一张图片在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(),但实际上它在开始处设置了图像资源

3 个答案:

答案 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);

            }
        });