1

我正在尝试在制作 android 应用程序时制作一些图像的幻灯片。我在下面使用此代码

final int[] array = {R.drawable.cow_1, R.drawable.cow_2, R.drawable.cow_3, R.drawable.cow_4};
for (int i = 0; i < 4; i++){
    final int finalI = i;
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {                                          
            animal_image.setImageResource(array[finalI]);
        }
    }, 4000);
}

我面临的问题是我没有得到一张一张的图像幻灯片,而是代码直接显示第一张图像之后的最后一张图像。代码有问题,请帮我解决。

4

2 回答 2

1

试试下面

final int[] array = {R.drawable.cow_1, R.drawable.cow_2, R.drawable.cow_3, R.drawable.cow_4};
for (int i = 0; i < 4; i++){
    final int finalI = i;
    Thread.sleep(4000);
     animal_image.setImageResource(array[finalI]);
}

你必须添加try{... }catch(Exception e){}块。

于 2019-03-27T17:15:44.283 回答
0

您的代码所做的是它Handler为每个图像创建一个并将延迟设置为 4 秒。循环将for在每次迭代时立即运行,所有已创建的处理程序将在 4 秒后运行。这会导致最后一个图像显示,因为最后一个处理程序将在其余的几毫秒后运行。为了解决这个问题,您需要为每个 Handler 设置一个增量计时器。

final int[] array = {R.drawable.cow_1, R.drawable.cow_2, R.drawable.cow_3, R.drawable.cow_4};
for (int i = 0; i < 4; i++){
    final int finalI = i;
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {                                          
            animal_image.setImageResource(array[finalI]);
        }
    }, 4000 * finalI);
}

使用上面给出的代码,将显示第一张图像,所有其他图像将根据图像编号在 4 秒的倍数后显示(图像 2 将在 4 秒后显示,图像 3 将在 8 秒后显示,图像 4 将在 12 秒后显示,依此类推)。

于 2019-03-27T17:33:02.797 回答