几秒钟后更改ImageView

时间:2010-09-18 11:11:34

标签: android asynchronous imageview

我正在尝试实现一个允许用户插入密码的简单活动。 我有一个使用9个图像的gridview和4个将成为所选图像的图像视图(点击gridview上的项目时,相应的图像将被选中的图像填充)。

现在出现问题:我希望4个图像视图与密码字段类似: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;
}

2 个答案:

答案 0 :(得分:2)

我认为您最好在ImageViews的onClickListener中使用View.postDelayed(Runnable, long)来执行此操作。

答案 1 :(得分: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调用),其中passfield不是局部变量而是类变量。

但是方法1是首选方式,我建议您首先尝试这种方式。