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

时间:2015-04-02 20:24:40

标签: java android loops if-statement increment

我正在从随机生成的数字中制作一个简单的序列。每个数字都会显示一个链接到它的图像。 例如,

值1将显示猫的图片。 值2一条狗 和价值3鼠标。

每个图像都有自己的专用图像视图,默认情况下布局如下所示,即存储黑色的图像视图,直到调用它为止:

enter image description here

每次序列递增。所以在第二次运行时会显示两个图像,第三个将显示,依此类推。

我遇到的问题是所有图像都会立刻显示出来。所以对于序列一,只有一个图像闪烁(这就是我想要的)。但是在第二次运行时,两个图像一起显示,而不是显示第一个图像,然后显示第二个图像。

所以为了澄清让我们在四次运行中说存储的数组是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);  

             }
        };          

那么我怎样才能实现我想要的目标。几个星期以来,我一直坚持这个想法。

2 个答案:

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