2010-09-18 135 views
0

我試圖執行一個簡單的活動,讓用戶插入密碼。 我有一個使用9個圖像的gridview和4個圖像將是選定的圖像(點擊gridview上的項目,對應的圖像將填充選定的圖像)。幾秒鐘後更改ImageView

現在的問題:我想這4個imageviews作用類似於密碼字段:1秒鐘時將出現選擇項,然後另一個圖像... 我使用asyncthread試過,但我和錯誤:只有原來的線程創建一個視圖層次可以觸摸其觀點 這裏我的代碼:

@Override 
protected String doInBackground(ImageView... imageViews) { 
    ImageView passField1 = imageViews[0]; 
    ImageView passField2 = imageViews[1]; 
    ImageView passField3 = imageViews[2]; 
    ImageView passField4 = imageViews[3]; 
    try { 
     switch (currentField) { 
     case 1: 
      passField1.setImageResource(//selected recource on grid view); 
      Thread.sleep(1000); 
      passField1.setImageResource(R.drawable.e00); //this is a blank image 
      break; 
     case 2: 
      passField2.setImageResource(//selected recource on grid view); 
      Thread.sleep(1000); 
      passField1.setImageResource(R.drawable.e00); 
      break; 
     case 3: 
      passField3.setImageResource(//selected recource on grid view); 
      Thread.sleep(1000); 
      passField1.setImageResource(R.drawable.e00); 
      break; 
     case 4: 
      passField4.setImageResource(//selected recource on grid view); 
      Thread.sleep(1000); 
      passField1.setImageResource(R.drawable.e00); 
      break; 
     } 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return null; 
} 

回答

0

方法1)

讓線程睡眠doInBackground,但變化資源在

@Override 
protected void onPostExecute(Void aVoid) {} 

AsyncTask的方法。此方法可以訪問UI線程。

方法2)

另一種方法可能是使用

YourActivity.this.runOnUiThread(new Runnable() { 
    public void run() { 
    YourActivity.this.passField1.setImageResource(R.drawable.e00) 
    } 
}); 

(從doInBackground調用),其中帕斯菲爾德是不是一個局部變量,但類變量。

但方法1是首選的方法,我建議你先嚐試這種方式。

2

我想你最好在你的ImageViews的onClickListener中使用View.postDelayed(Runnable, long)來做到這一點。

+0

嗨凱文,很高興在這裏見到你:)是的,我同意,你的方法更優雅;我只是看着斯特凡諾現有的代碼。實際上並不知道postDelayed方法。很高興知道。 – 2010-09-19 12:41:46