runOnUiThread внутри представления
Я создаю пользовательский ImageView
. Один из способов - загрузить изображение из URL-адреса. И я хочу получить битмап в потоке и загрузить растровое изображение в потоке пользовательского интерфейса.
Как я могу сделать runOnUIThread()
для рисования растрового изображения?
Есть ли какая-то встроенная функция? Или я должен создать Handler
в конструкторе и использовать его для запуска runnables в потоке пользовательского интерфейса?
Ответы
Ответ 1
Загрузите изображение через AsyncTask
и установите для своего представления его метод onPostExecute
ИЛИ
Из отдельного потока загрузки изображения используйте метод post для View
который всегда будет запускать Runnable
в UI-thread:
yourImageView.post(new Runnable() {
@Override
public void run() {
// set the downloaded image here
}
});
Ответ 2
Вы можете сделать что-то вроде этого:
new Thread(new Runnable() {
public void run() {
final Bitmap bm = getBitmapFromURL(myStation.getStation().imageURL);
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
icon.setImageBitmap(bm);
}
});
}
}).start();
Это будет работать вне активности, например, в ListAdapter.
Ответ 3
Создайте класс, который простирается от AsyncTask. Передайте ImageView в конструкторе. В методе doInBackground загрузите изображение. В методе postExecute установите изображение в ImageView.