2015-04-02 58 views
0

我正在從隨機生成的數字中創建一個簡單的序列。每個號碼都會顯示一個鏈接到它的圖像。例如, ,遞增值如何一次顯示一個值

值1將顯示貓的圖片。 值2狗 和值3鼠標。

每張圖片都有自己專用的ImageView,佈局看起來像這樣在默認情況下,存儲黑,直到它即圖像視圖數被稱爲:

enter image description here

每次序列遞增。所以第二次運行時會顯示兩個圖像,第三個將顯示等等。

我遇到的問題是所有圖像一次顯示。因此,對於序列,只有一個圖像閃爍(這是我想要的)。但在第二次運行時,兩個圖像同時顯示在一起,而不是顯示第一個圖像,然後顯示第二個圖像。

所以要澄清,讓我們在4次操作的存儲陣列是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); 

      } 
     };   

那麼我怎麼能達到我想要的。我一直堅持這個想法好幾個星期。

+0

我不完全確定,但是CountDownTimer是否運行異步? IE瀏覽器。它是否阻止你的for循環進入下一個循環?如果不是這樣,那麼爲什麼所有人立即出現並立即消失,這是有道理的。 – 2015-04-02 20:35:37

+0

我加了一個高級別的答案。你可以做到這一點的方法很少,我想到的第一個想法就是解釋。 – 2015-04-02 20:46:36

+0

這段代碼是如何編譯的?粘貼它或其他東西時你把它搞亂了嗎?因爲這不會產生大量的語法錯誤。 – Gumbo 2015-04-02 20:57:53

回答

0

這是您可以做什麼的高級概念。

把所有的顯示和隱藏在countdowntimer。所以基本上你需要處理'onTick',並在需要時隱藏或顯示圖像。像「時間> 0和< 1000」這樣的東西隱藏了除第一張圖像以外的所有圖像。 1000到2000,只顯示第二張圖片。 2000到3000,只顯示第三張圖片。完成後,隱藏所有。

當你實例計時器後的for循環,如果是retval 1 - 那麼1000將是跑了多久,RETVAL = 2,那麼2000年,RETVAL = 3,那麼3000

有可能是一個更好的方式來做到這一點,但這是我想到的第一件事。

0

一個問題可能是Reset_View();不是一種方法。該行甚至指出public CLASS Reset_View(); extends CountDownTimer。 (我不知道ho可以是一個有效的類名,但不管怎樣)因此,調用Reset_View();實際上不會做任何事情。 您需要將課程名稱更改爲其他內容,我建議ResetTimer。然後重置的觀點,你必須創建ResetTimer一個實例,並使用其start()方法是這樣的:

new ResetTimer(1000, 1000).start(); 

注:在構造函數中的第一個數字是總時間(毫秒),直到計時器onFinish()被調用。第二個是它在onTick()之間的時間。由於您不使用此方法,因此您放入的號碼無關緊要。