增量值如何一次显示一个值
Incremental values how to show one value at a time
我正在用随机生成的数字制作一个简单的序列。每个数字将显示与其链接的图像。
例如,
值 1 将显示一张猫的图片。
价值 2 一只狗
值 3 为鼠标。
每个图像都有自己专用的图像视图,默认情况下布局如下所示,即图像视图存储黑色直到它的编号被调用:
每次序列递增。所以第二个 运行 会显示两张图片,第三个会显示 3 张,依此类推。
我遇到的问题是一次显示所有图像。所以对于序列一,只有一个图像闪烁(这就是我想要的)。但在第二张 运行 上,两张图片同时显示,而不是先显示第一张再显示第二张。
所以为了澄清让我们说在四个 运行 上存储的数组是 1,2,3,3 我想要
要显示的图像 1,并且 disappear.then
图 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);
}
};
那么我怎样才能达到我想要的。几个星期以来,我一直坚持这个想法。
这是您可以做什么的高级想法。
把所有的显示和隐藏都放在倒计时里。所以基本上你需要处理 'onTick' 并在需要时隐藏或显示图像。 'time > 0 and < 1000' 之类的东西隐藏除了第一张图片以外的所有图片。 1000 到 2000,只显示第二张图片。 2000 到 3000,只显示第三张图片。完成后,隐藏所有。
当你在for循环后实例化定时器时,如果retval是1 - 那么1000就是多长时间运行,retval = 2,然后是2000,retval = 3,然后是3000。
可能有更好的方法,但这是我首先想到的。
一个问题可能是 Reset_View();
不是一种方法。该行甚至声明 public CLASS Reset_View(); extends CountDownTimer
。 (我不知道 ho 可以是一个有效的 class 名称,但无论如何)因此,调用 Reset_View();
实际上不会做任何事情。
您需要将 class 的名称更改为其他名称,我建议 ResetTimer
。然后要重置视图,您必须创建 ResetTimer
的实例并使用其 start()
方法,如下所示:
new ResetTimer(1000, 1000).start();
注意:构造函数中的第一个数字是调用计时器 onFinish()
之前的总时间(以毫秒为单位)。第二个是 onTick()
之间的时间。由于您不使用此方法,因此输入的数字无关紧要。
我正在用随机生成的数字制作一个简单的序列。每个数字将显示与其链接的图像。 例如,
值 1 将显示一张猫的图片。 价值 2 一只狗 值 3 为鼠标。
每个图像都有自己专用的图像视图,默认情况下布局如下所示,即图像视图存储黑色直到它的编号被调用:
每次序列递增。所以第二个 运行 会显示两张图片,第三个会显示 3 张,依此类推。
我遇到的问题是一次显示所有图像。所以对于序列一,只有一个图像闪烁(这就是我想要的)。但在第二张 运行 上,两张图片同时显示,而不是先显示第一张再显示第二张。
所以为了澄清让我们说在四个 运行 上存储的数组是 1,2,3,3 我想要
要显示的图像 1,并且 disappear.then 图 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);
}
};
那么我怎样才能达到我想要的。几个星期以来,我一直坚持这个想法。
这是您可以做什么的高级想法。
把所有的显示和隐藏都放在倒计时里。所以基本上你需要处理 'onTick' 并在需要时隐藏或显示图像。 'time > 0 and < 1000' 之类的东西隐藏除了第一张图片以外的所有图片。 1000 到 2000,只显示第二张图片。 2000 到 3000,只显示第三张图片。完成后,隐藏所有。
当你在for循环后实例化定时器时,如果retval是1 - 那么1000就是多长时间运行,retval = 2,然后是2000,retval = 3,然后是3000。
可能有更好的方法,但这是我首先想到的。
一个问题可能是 Reset_View();
不是一种方法。该行甚至声明 public CLASS Reset_View(); extends CountDownTimer
。 (我不知道 ho 可以是一个有效的 class 名称,但无论如何)因此,调用 Reset_View();
实际上不会做任何事情。
您需要将 class 的名称更改为其他名称,我建议 ResetTimer
。然后要重置视图,您必须创建 ResetTimer
的实例并使用其 start()
方法,如下所示:
new ResetTimer(1000, 1000).start();
注意:构造函数中的第一个数字是调用计时器 onFinish()
之前的总时间(以毫秒为单位)。第二个是 onTick()
之间的时间。由于您不使用此方法,因此输入的数字无关紧要。