Ich verwende Picasso , um Bilder für meine App herunterzuladen.
Ich bin in einer Situation, in der ich auf die Bitmap
erste zugreifen muss, bevor sie in die geladen wird ImageView
. Die Anwesenheit der Downloader.Response
Klasse scheint darauf hinzudeuten, dass dies möglich ist, aber ich kann keine Anwendungsbeispiele finden. Ich möchte nicht mehr Code schreiben, um diesen einen speziellen Fall asynchron zu behandeln, wenn dies mit Picasso möglich ist.
Kann mir jemand zeigen, wie es geht?
Antworten:
Ich habe die Antwort auf Github gefunden, falls sich jemand wundert:
In diesem Beitrag wird empfohlen, keinen anonymen Rückruf zu verwenden und stattdessen eine Instanzvariable für das Ziel zu verwenden.
quelle
Target
eine Ansicht oder ein Ansichtsinhaberobjekt direkt. Wenn Sie dies nicht tun, müssen Sie irgendwo einen starken Verweis auf die Instanz beibehalten, da sonst Müll gesammelt wird.ListView
, schlagen Sie vor, Folgendes zu tun :private static ViewHolder { private ImageView imageView; private Target target = new Target() { public void onBitmapLoaded() { // do animation on imageView } } }
?von hier genommen :
Aktualisiert (04. Mai 2016):
Aktualisiert (22. November 2016)
oder verwenden Sie eine starke Referenz
Target
, damit kein Müll gesammelt wirdKotlin
quelle
Was kann einfacher sein als das nächste:
Sollte nicht vom Haupt-Thread aufgerufen werden!
oder mit RxJava 2:
Bitmap abrufen:
Ich habe Picasso v.2.5.2 verwendet
quelle
Ich dachte, vielleicht möchten einige von Ihnen eine RxJava-Version der obigen Antwort ... Hier ist es:
PS Speichern Sie beim Abonnieren die Abonnementreferenz für Ihre Aktivität. Andernfalls wird das Ziel GC-geprüft, bevor Sie eine Antwort erhalten ...
quelle