几秒钟后更改ImageView

问题描述:

我试图执行一个简单的活动,让用户插入密码。 我有一个使用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; 
} 

方法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是首选的方法,我建议你先尝试这种方式。

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

+0

嗨凯文,很高兴在这里见到你:)是的,我同意,你的方法更优雅;我只是看着斯特凡诺现有的代码。实际上并不知道postDelayed方法。很高兴知道。 – 2010-09-19 12:41:46