我正在从随机生成的数字中制作一个简单的序列。每个数字都会显示一个链接到它的图像。 例如,
值1将显示猫的图片。 值2一条狗 和价值3鼠标。
每个图像都有自己的专用图像视图,默认情况下布局如下所示,即存储黑色的图像视图,直到调用它为止:
每次序列递增。所以在第二次运行时会显示两个图像,第三个将显示,依此类推。
我遇到的问题是所有图像都会立刻显示出来。所以对于序列一,只有一个图像闪烁(这就是我想要的)。但是在第二次运行时,两个图像一起显示,而不是显示第一个图像,然后显示第二个图像。
所以为了澄清让我们在四次运行中说存储的数组是1,2,3,3我想要
图像1显示,然后消失。然后 图像2显示并消失。然后 图像3显示并消失 然后图像3显示并消失。
但实际得到的是第四轮1,2& 3将同时显示并同时消失。我怎样才能打破这一点来实现我的目标。我尝试了很多方法,但结果却相同。我无法理解这个问题。
这是我的代码:
ArrayList<Integer> stored_vals = new ArrayList<Integer>();
public void Gen() {
int i=0 ;
Random rand = new Random();
int rndInt = rand.nextInt(3)+ 1 ;
list.add(rndInt);
int totalElements = list.size();
Log.d("LOOK", Integer.toString(rndInt));
Log.i("VALUE LIST ", list.toString()+" <<<<LIST HERE");
while(i < totalElements) {
retval =list.get(i);
Log.d("RETVAL", Integer.toString(retval));
String imgName = "flash" + retval;
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
if (retval==1){
Cat.setImageResource(id);
Reset_View();
}
else if (retval==2){
Dog.setImageResource(id);
Reset_View();
}
else if (retval==3){
Mouse.setImageResource(id);
Reset_View();
}
i++;
}
}
尝试延迟一次显示的图像并在显示几秒钟后重置为默认值我调用Reset_View();这是以下代码:
CountDownTimer Reset_View = new CountDownTimer(1000 , 0010){
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
Centre.setImageResource(R.drawable.i1);
upperRight.setImageResource(R.drawable.i2);
lowerRight.setImageResource(R.drawable.i3);
lowerLeft.setImageResource(R.drawable.i4);
upperLeft.setImageResource(R.drawable.i5);
}
};
那么我怎样才能实现我想要的目标。几个星期以来,我一直坚持这个想法。
答案 0 :(得分:0)
这是对你能做什么的高层次想法。
将所有显示和隐藏在倒数计时器中。所以基本上你需要处理'onTick'并在需要时隐藏或显示图像。像'时间&gt;这样的东西0和&lt; 1000'隐藏除第一张图片以外的所有图像。 1000到2000,仅显示第二个图像。 2000至3000,仅显示第三张图像。完成后,隐藏所有。
当你在for循环之后实例化计时器时,如果retval是1 - 则1000将是运行多长时间,retval = 2,然后是2000,retval = 3,然后是3000.
可能有更好的方法,但这是我想到的第一件事。
答案 1 :(得分:0)
一个问题可能是Reset_View();
不是方法。该行甚至表示public CLASS Reset_View(); extends CountDownTimer
。 (我不知道这可能是一个有效的类名,但无论如何)因此,调用Reset_View();
实际上不会做任何事情。
您需要将类的名称更改为其他名称,我建议ResetTimer
。然后要重置视图,您必须创建ResetTimer
的实例并使用其start()
方法,如下所示:
new ResetTimer(1000, 1000).start();
注意:构造函数中的第一个数字是调用计时器onFinish()
之前的总时间(以毫秒为单位)。第二个是onTick()
之间的时间。由于您不使用此方法,因此您输入的数字无关紧要。