runOnUiThread inside a View

2020-03-01 05:32发布

I'm making a custom ImageView . One of the methods is to load an image from a URL. And I want to retrieve the Bitmap in a Thread and load the bitmap in the UI thread.

How can I make a runOnUIThread() call for painting the bitmap?

Is there some kind of built in function? Or should I create a Handler in the constructor and use it for running runnables in the UI thread?

3条回答
家丑人穷心不美
2楼-- · 2020-03-01 06:03

Download the Image via AsyncTask and set to your view in its onPostExecute method

OR

From a separate image downloading thread use the post method of View which will always run its Runnable on UI-thread:

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

    }
});
查看更多
beautiful°
3楼-- · 2020-03-01 06:09

You can do something like this:

 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();

This will work outside of an activity, like in a ListAdapter.

查看更多
beautiful°
4楼-- · 2020-03-01 06:09

Create a class that extends from AsyncTask. Pass the ImageView in the constructor. In the doInBackground method, download the image. In the postExecute method, set the image to the ImageView.

查看更多
登录 后发表回答