Erhalten Sie "Bitmap" aus Bildansicht geladen mit Picasso
Hatte ich eine Methode, die Belastungen Bilder, wenn das Bild noch nicht geladen wurde, bevor es auf einem server. Dann speichert er es in die apps-Datei-system. Wenn es in der Datei system lädt, das Bild stattdessen als, die ist viel schneller als das abrufen der Bilder vom server. Wenn Sie geladen haben das Bild vor ohne die app zu schließen, es wird gespeichert werden, in einem statischen Wörterbuch, so dass er erneut geladen werden können, ohne mehr Speicher zu vermeiden, out-of-memory-Fehler.
Dies alles funktionierte gut, bis ich begann mit der Picasso-laden der Bilder-Bibliothek. Jetzt bin ich das laden von Bildern in einer Bildansicht, aber ich weiß nicht, wie man die Bitmap zurückgegeben wird, so dass ich speichern Sie es in eine Datei oder das statische Wörterbuch. Dieser hat die Dinge schwieriger. weil es bedeutet, dass es versucht zu laden das Bild vom server jedes mal, das ist etwas, was ich nicht wollen, zu geschehen. Gibt es eine Möglichkeit, ich kann das Bitmap nach dem einsetzen in die Bildansicht? Unten ist mein code:
public Drawable loadImageFromWebOperations(String url,
final String imagePath, ImageView theView, Picasso picasso) {
try {
if (Global.couponBitmaps.get(imagePath) != null) {
scaledHeight = Global.couponBitmaps.get(imagePath).getHeight();
return new BitmapDrawable(getResources(),
Global.couponBitmaps.get(imagePath));
}
File f = new File(getBaseContext().getFilesDir().getPath()
.toString()
+ "/" + imagePath + ".png");
if (f.exists()) {
picasso.load(f).into(theView);
**This line below was my attempt at retrieving the bitmap however
it threw a null pointer exception, I assume this is because it
takes a while for Picasso to add the image to the ImageView**
Bitmap bitmap = ((BitmapDrawable)theView.getDrawable()).getBitmap();
Global.couponBitmaps.put(imagePath, bitmap);
return null;
} else {
picasso.load(url).into(theView);
return null;
}
} catch (OutOfMemoryError e) {
Log.d("Error", "Out of Memory Exception");
e.printStackTrace();
return getResources().getDrawable(R.drawable.default1);
} catch (NullPointerException e) {
Log.d("Error", "Null Pointer Exception");
e.printStackTrace();
return getResources().getDrawable(R.drawable.default1);
}
}
Jede Hilfe wäre sehr geschätzt, danke!
InformationsquelleAutor shadowarcher | 2014-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit Picasso, die Sie nicht brauchen, um Ihre eigene statische Wörterbuch, weil es wird automatisch für Sie erledigt. @intrepidkarthi hatte Recht in dem Sinne, dass die Bilder werden automatisch zwischengespeichert, von Picasso das erste mal geladen sind und damit es nicht ständig den server aufrufen, um das gleiche Bild.
Davon abgesehen, fand ich mich in einer ähnlichen situation: ich brauchte, um Zugriff auf die bitmap, die heruntergeladen wurde, um zu speichern, es irgendwo anders in meiner Anwendung. Für dass, das ich gezwickt @Gilad Haimov ' s Antwort ein wenig:
Java, die mit einer älteren version von Picasso:
Kotlin, mit version 2.71828 von Picasso:
Dadurch erhalten Sie Zugriff auf das bitmap geladen, während noch geladen wird es asynchron. Sie müssen nur daran denken, es in der Bildansicht, da es nicht mehr automatisch für Sie erledigt.
On a side note, wenn Sie daran interessiert sind zu wissen, wo dein Bild herkommt, Sie kann auf diese Informationen innerhalb derselben Methode. Das zweite argument der oben genannten Methode
Picasso.LoadedFrom from
ist ein enum, dass lässt Sie wissen, aus welcher Quelle Sie die bitmap geladen wurde (der drei QuellenDISK
,MEMORY
, undNETWORK
. (Quelle). Square Inc. auch bietet eine visuelle Art und Weise zu sehen, in dem die bitmap geladen wurde, durch die Verwendung des debug-Indikatoren erläutert hier.Hoffe, das hilft !
InformationsquelleAutor jguerinet
Picasso gibt Ihnen die direkte Kontrolle über die heruntergeladenen Bilder. Zum speichern der heruntergeladenen Bilder in einer Datei etwas wie das hier tun:
Wo:
InformationsquelleAutor Gilad Haimov
Da Sie über Picasso, können Sie auch wollen, um es voll ausnutzen. Es beinhaltet eine leistungsfähige caching-Mechanismus.
Verwenden
picasso.setDebugging(true)
auf IhrePicasso
Instanz, um anzuzeigen, welche Art von caching-Auftritt (Bilder geladen von der Festplatte, Speicher oder Netzwerk). Siehe : http://square.github.io/picasso/ (debug-Indikatoren)Die Standard-Instanz von Picasso konfiguriert ist (http://square.github.io/picasso/javadoc/com/squareup/picasso/Picasso.html#with-android.content.Context-)
Können Sie auch angeben, Ihre
Cache
Instanz mitPicasso.Builder
anpassen, um Ihre Instanz, und Sie können IhreDownloader
für eine feinere Kontrolle. (Es ist eine Implementierung vonOkDownloader
im Picasso der automatisch verwendet wird, wenn SieOkHttp
in Ihrem app.)InformationsquelleAutor njzk2
In diesem Beispiel habe ich verwendet, um den hintergrund eines colapsing toolbar.
Ich hoffe es hat dir geholfen.
InformationsquelleAutor Thialyson Martins
Verwenden Sie diese
Hoffe, es hilft Ihnen
onSuccess()
keine Bitmap-Objekt.Hemanth nur konvertieren oder verwenden Sie den Gegner. Ziel sorgen bitmap!
InformationsquelleAutor Madi