增量值如何一次显示一个值

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() 之间的时间。由于您不使用此方法,因此输入的数字无关紧要。