Hallo, ich möchte einen Fortschrittsbalken für das Bild haben, der beim Laden des Bildes angezeigt wird, aber wenn das Laden des Bildes abgeschlossen ist, möchte ich ihn auf "weg" setzen. Früher habe ich dafür die Picasso-Bibliothek verwendet. Aber ich weiß nicht, wie ich es mit der Glide-Bibliothek verwenden soll. Ich habe die Idee, dass eine ressourcenbereite Funktion vorhanden ist, weiß aber nicht, wie ich sie verwenden soll. Kann mir jemand helfen?
Code für die Picasso-Bibliothek
Picasso.with(mcontext).load(imgLinkArray.get(position).mUrlLink)
.into(imageView, new Callback() {
@Override
public void onSuccess() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onError() {
}
})
;
Wie kann ich das mit Glide machen?
Glide.with(mcontext).load(imgLinkArray.get(position).mUrlLink)
.into(imageView);
Ich kann das Bild mit Glide laden, aber wie kann ich progressBar.setVisibility(View.GONE);
irgendwo in Code schreiben , wenn das Bild geladen wird?
android
imageview
android-glide
HariRam
quelle
quelle
Antworten:
Die Frage ist ziemlich alt, und ich weiß nicht, wie es damals mit dem Gleiten war, aber jetzt kann es leicht mit dem Hörer gemacht werden (nicht wie in der als richtig gewählten Antwort vorgeschlagen).
Sie geben true zurück, wenn Sie Dinge wie Animationen selbst verarbeiten möchten, und false, wenn Sie möchten, dass glide sie für Sie verarbeitet.
quelle
progressBar
in Betracht, das In auch zu versteckenonException
, sonst dreht es sich auf unbestimmte Zeit und gibt falsche Hoffnung. SobaldonException
Glide genannt wird, wird nichts anderes getan, als festzulegen, an was übergeben wird.error()
..listener
muss vorher angerufen werden.into()
Wenn Sie dies in KOTLIN tun möchten, können Sie Folgendes versuchen:
quelle
import com.bumptech.glide.request.target.Target
Meine Antwort basierte auf veralteten APIs. Sehen Sie hier für die mehr up-to-date Antwort.
quelle
.listener()
ist besser, weil Sie mehr Informationen über Ihre Last erhalten (Modell, Speichercache, ...), sodass es einfacher ist, mehr benutzerdefinierte Logik zu bestimmen.RequestListener
ist auch stabiler. WennTarget
Sie überschreiben, was erstellt werden soll, profitieren Sie nicht von zukünftigen Korrekturen. Sie können auch einfach eine erstellenVisibilityListener<T, R>
, die Sie in verschiedenen Kontexten wiederverwenden können.In Ausnahme setzen Sie eine Bedingung für die erneute Anzeige der
ProgressBar
quelle
Die obige Lösung funktioniert auch für mich ziemlich gut, aber wenn ich asBitmap () verwende , um das Bild herunterzuladen. Es funktioniert nicht.
Wir müssen BitmapImageViewTarget verwenden
quelle
GlideDrawable sind veraltet, verwenden Sie einfach Drawable
quelle
In Kotlin können Sie wie unten tun
quelle
Stellen Sie vor dem Aufrufen der unten genannten Methode die Sichtbarkeit des Fortschrittsbalkens sichtbar ein.
quelle
Aktualisieren:
quelle
Wie ich Dinge gemacht habe. der kürzere Weg, sauberer Code
Beispiel:
Verwendung:
GlideImpl.OnCompleted { }
geh einfach zum Glide's.listener()
und das ist alles!
quelle
Dies ist die beste Antwort, da kein Hack wie das Einstellen der Sichtbarkeit verwendet wird, um die gewünschte Ausgabe zu erhalten.
Laden Sie ein GIF der Fortschrittsanzeige herunter, rufen Sie es auf
progressbargif
und legen Sie es in den Zeichenordner.Sobald das URL-Bild geladen ist, verschwindet die Miniaturansicht. Die Miniaturansicht verschwindet sofort, wenn das zwischengespeicherte Bild geladen wird.
quelle
drawable
ist an sich schlecht, da es nicht vom Framework geladen wird, sondern inraw
oderassets
bestenfalls sein sollte. Es ist nichts Falsches daran, die Sichtbarkeit zu ändern, wenn Ereignisse in Ihrer App auftreten. Android ist dafür konzipiert.RESULT
speichern auch den Fortschrittsbalken, was bedeutet, dass das Laden eine Weile dauert. GIFs solltenSOURCE
aus Effizienzgründen bestenfalls zwischengespeichert werden. Da es sich jedoch um eine lokale Datei handelt, muss der Cache so gestaltet sein, dassNONE
sie nicht auf der Festplatte dupliziert wird, wodurch noch mehr Benutzerplatz belegt wird.