19

我正在定制ImageView。其中一种方法是从 URL 加载图像。我想在线程中检索位图并在 UI 线程中加载位图。

如何runOnUIThread()调用绘制位图?

是否有某种内置功能?或者我应该在构造函数中创建一个Handler并将其用于在 UI 线程中运行可运行对象?

4

3 回答 3

55

通过下载图像AsyncTask并在其onPostExecute方法中设置为您的视图

或者

从单独的图像下载线程使用post方法,View该方法将始终RunnableUI 线程上运行:

yourImageView.post(new Runnable() {
    @Override
    public void run() {
        // set the downloaded image here

    }
});
于 2012-06-18T15:37:54.260 回答
6

你可以这样做:

 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 中。

于 2013-04-16T23:40:09.087 回答
2

创建一个从 AsyncTask 扩展的类。在构造函数中传递 ImageView。在 doInBackground 方法中,下载图像。在 postExecute 方法中,将图像设置为 ImageView。

于 2012-06-18T15:45:34.907 回答