2011-05-08 63 views
0

我有一個「活動」三個圖像。當單擊一個圖像時,所有圖像將切換到另一個圖像。有沒有辦法讓這些開關在圖像實際改變之前有2秒延遲(即下面每個'for循環'中的2秒延遲)?我試圖用計時器來做到這一點,但是當我運行我的程序,它實際上並不對延遲:如何設置的圖像與延遲

protected void onCreate(Bundle savedInstanceState) { 
image1.setOnClickListener(this); 

@Override 
public void onClick(View arg0) 
{ 
do_switches(); 
} 

private void do_switches() 
{ 
//loop through all images and change them 
for(int j=1 ;j<=3; j++) 
{   


final int curr2=current; 
final Handler handler = new Handler(); 
Timer t = new Timer(); 
t.schedule(new TimerTask() { 
     public void run() { 
     handler.post(new Runnable() { 
       public void run() { 

     switch(curr2){ 

     case 1: 

      image1.setImageResource(ImageArray[1]); 
        break; 

     case 2: 

      image2.setImageResource(ImageArray[2]); 
          break; 

     case 3: 
      image3.setImageResource(ImageArray[3]); 
         break; 

     } 
      } 
     }); 
    } 
}, 2000); 
} 

}

我也只用SystemClock.sleep(2000)也試圖代替計時器,但我也沒有工作。我也嘗試設置一個線程與try/catch沒有運氣,也許我沒有正確實施它。有沒有辦法在我for循環的每次迭代中放置這個延遲? 感謝

回答

0

最好的選擇不是一個,但你仍然可以嘗試CountDownTimer。

http://developer.android.com/reference/android/os/CountDownTimer.html

+1

真棒!..這個工作perfectly..thanks – Tobi 2011-05-11 00:27:24

+0

我首先存儲圖像序列中的陣列,以改變當時我使用倒數計時器真正改變的圖像。但是當我將我的間隔設置爲少量(小於〜2000毫秒)時,它會錯過我陣列中最後的1或2個插槽。你知道這可能是什麼原因嗎? – Tobi 2011-05-18 01:37:09

0

您可以使用handler.postDelayed(Runnable的R,長timeInMillis)。讓你的runnable改變圖片,然後調用postDelayed()並傳遞可運行時間和2000時間延遲。

編輯:啊我看到你正在嘗試做的。據我所知,你每次都不能進行循環暫停2秒。如果您鏈接postDelayed()調用,您可以獲得相同的效果。剛剛成立的下一可運行並在其上調用postDelayed()的第一個裏面,同樣從第二個內部的第三個。您將最終獲得與每次迭代暫停2秒的for循環相同的功能。

+0

我只是想這樣做,你說什麼,但我對循環還是轉移到即使兩秒尚未經過下一次迭代。我如何才能讓for循環的當前迭代等待,直到2秒後才能繼續? – Tobi 2011-05-09 03:57:49

+0

就我而言,我將盡可能多次調用同一個runnable。我將如何做到這一點? – Tobi 2011-05-18 01:31:38