我正在尝试制作一个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);
}
我面临的问题是我没有一张一张地幻灯片显示图像,而是代码直接显示了第一张图像之后的最后一张图像。代码有问题,请帮助我修复它。
答案 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秒后显示,依此类推。