2012-06-18 8 views
11

Ich mache eine benutzerdefinierte ImageView. Eine der Methoden besteht darin, ein Bild von einer URL zu laden. Und ich möchte die Bitmap in einem Thread abrufen und die Bitmap im UI-Thread laden.runOnUiThread in einer Ansicht

Wie kann ich einen runOnUIThread() Aufruf zum Malen der Bitmap machen?

Gibt es eine eingebaute Funktion? Oder sollte ich ein Handler im Konstruktor erstellen und es zum Ausführen von Runnables im UI-Thread verwenden?

+2

gehen mit Handler. runOnUIThread ist eine Methode der Aktivität, wenn ich mich nicht irre – Rich

Antwort

37

das Bild über AsyncTask herunterladen und in seiner OnPostExecute Methode

OR

Von einem separaten Bild zum Herunterladen Thread verwenden, um die Post Methode von View zu Ihrer Ansicht gesetzt, der immer seine Runnable läuft auf UI-Thread:

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

    } 
}); 
+0

mehr Infos hier: http://stackoverflow.com/q/10558208 – cyrilchampier

2

Erstellen Sie eine Klasse, die sich von AsyncTask erstreckt. Übergeben Sie ImageView im Konstruktor. Laden Sie das Image in der doInBackground-Methode herunter. Setzen Sie das Bild in der postExecute-Methode auf ImageView.

4

Sie können etwas tun:

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

Dies wird außerhalb einer Tätigkeit arbeiten, wie in einem ListAdapter.

Verwandte Themen