几秒钟后更改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是首选的方法,我建议你先尝试这种方式。
嗨凯文,很高兴在这里见到你:)是的,我同意,你的方法更优雅;我只是看着斯特凡诺现有的代码。实际上并不知道postDelayed方法。很高兴知道。 – 2010-09-19 12:41:46