Измените ImageView через несколько секунд - PullRequest
0 голосов
/ 18 сентября 2010

Я пытаюсь реализовать простое действие, которое позволит пользователю ввести пароль.У меня есть сетка с 9 используемыми изображениями и 4 изображениями, которые будут выбранными (при нажатии на элемент в сетке, соответствующее изображение будет заполнено выбранным).

Теперь проблема:Я хочу, чтобы 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 ]

2 голосов
/ 18 сентября 2010

Я думаю, вам лучше использовать View.postDelayed (Runnable, long) в onClickListener ваших ImageViews, чтобы сделать это.

0 голосов
/ 18 сентября 2010

Подход 1)

Позвольте потоку спать в doInBackground, но измените ресурс в

@Override
protected void onPostExecute(Void aVoid) {}

метод AsyncTask. Этот метод имеет доступ к потоку пользовательского интерфейса.

Подход 2)

Другим способом может быть использование

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

(вызывается из doInBackground), где паролем является не локальная переменная, а переменная класса.

Но подход 1 является предпочтительным способом, я советую вам попробовать сначала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...