如何修改代码以在Android中显示图片幻灯片?

时间:2019-03-27 17:08:59

标签: android androidimageslider

我正在尝试制作一个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);
}

我面临的问题是我没有一张一张地幻灯片显示图像,而是代码直接显示了第一张图像之后的最后一张图像。代码有问题,请帮助我修复它。

2 个答案:

答案 0 :(得分: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){}块。

答案 1 :(得分:1)

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

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秒钟的倍数后显示所有其他图像(在4秒钟后显示图像2,在显示3图像8秒后,图像4将在12秒后显示,依此类推。