Upewnij się, że korzystasz z najnowszej wersji
implementation 'com.github.bumptech.glide:glide:4.10.0'
Kotlin:
Glide.with(this)
.asBitmap()
.load(imagePath)
.into(object : CustomTarget<Bitmap>(){
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
imageView.setImageBitmap(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {
// this is called when imageView is cleared on lifecycle call or for
// some other reason.
// if you are referencing the bitmap somewhere else too other than this imageView
// clear it here as you can no longer have the bitmap
}
})
Rozmiar mapy bitowej:
jeśli chcesz użyć oryginalnego rozmiaru obrazka użyj domyślnego konstruktora jak powyżej, w przeciwnym razie możesz przekazać żądany rozmiar dla bitmapy
into(object : CustomTarget<Bitmap>(1980, 1080)
Jawa:
Glide.with(this)
.asBitmap()
.load(path)
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
Stara odpowiedź:
Z compile 'com.github.bumptech.glide:glide:4.8.0'
i poniżej
Glide.with(this)
.asBitmap()
.load(path)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
}
});
Dla compile 'com.github.bumptech.glide:glide:3.7.0'
i poniżej
Glide.with(this)
.load(path)
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
imageView.setImageBitmap(resource);
}
});
Teraz możesz zobaczyć ostrzeżenie SimpleTarget is deprecated
Powód:
Głównym celem wycofania SimpleTarget jest ostrzeżenie o sposobach, w jakie kusi Cię do zerwania kontraktu API Glide. W szczególności nie robi nic, aby zmusić cię do zaprzestania używania jakiegokolwiek zasobu, który załadowałeś po wyczyszczeniu SimpleTarget, co może prowadzić do awarii i uszkodzenia grafiki.
SimpleTarget
Nadal mogą być stosowane tak długo, upewnić się, że nie używasz bitmapy po ImageView rozjaśnia.
4.9.0
.asBitmap()
należy umieścić po,with(this)
jeśli problem nie został rozwiązany.Nie jestem wystarczająco zaznajomiony z Glide, ale wygląda na to, że jeśli znasz rozmiar docelowy, możesz użyć czegoś takiego:
Wygląda na to, że możesz przejść
-1,-1
i uzyskać obraz w pełnym rozmiarze (wyłącznie na podstawie testów, nie można go zobaczyć udokumentowanego).Note
into(int,int)
zwraca aFutureTarget<Bitmap>
, więc musisz owinąć to w pokrycie bloku try-catchExecutionException
iInterruptedException
. Oto bardziej kompletna przykładowa implementacja, przetestowana i działająca:Zgodnie z sugestią Monkeyless w komentarzu poniżej (i wydaje się, że jest to również oficjalny sposób ), możesz użyć a
SimpleTarget
, opcjonalnie w połączeniu z,override(int,int)
aby znacznie uprościć kod. Jednak w tym przypadku należy podać dokładny rozmiar (dane poniżej 1 nie są akceptowane):zgodnie z sugestią @hennry, jeśli potrzebujesz tego samego obrazu, użyj
new SimpleTarget<Bitmap>()
źródło
Target.SIZE_ORIGINAL
zarówno szerokość, jak i wysokość bitmapy zamiast -1SimpleTarget
tego:new SimpleTarget<Bitmap>(){....}
Wygląda na to, że zastąpienie
Target
klasy lub jednej z implementacji, takich jakBitmapImageViewTarget
i zastąpieniesetResource
metody przechwytywania mapy bitowej, może być dobrym rozwiązaniem ...To jest niesprawdzone. :-)
źródło
AKTUALIZACJA
Teraz musimy użyć
Custom Targets
PRZYKŁADOWY KOD
Przede wszystkim odpowiedzi są poprawne, ale nieaktualne
bo w nowej wersji Glide
implementation 'com.github.bumptech.glide:glide:4.8.0'
Poniżej znajdziesz błąd w kodzie
.asBitmap()
jest dostępny wglide:4.8.0
jest przestarzałeSimpleTarget<Bitmap>
Oto rozwiązanie
źródło
To właśnie zadziałało dla mnie: https://github.com/bumptech/glide/wiki/Custom-targets#overriding-default-behavior
źródło
Jeśli chcesz przypisać dynamiczny obraz bitmapowy do zmiennych bitmapowych
Przykład dla
kotlin
Powyższe odpowiedzi mi nie pomogły
.asBitmap
powinien znajdować się przed.load("http://....")
źródło
AKTUALIZACJA DO NOWEJ WERSJI
STARA ODPOWIEDŹ
Odpowiedź @ outlyera jest poprawna, ale w nowej wersji Glide nastąpiły pewne zmiany
Moja wersja: 4.7.1
Kod:
Uwaga: ten kod działa w UI Thread, więc możesz użyć AsyncTask, Executor lub czegoś innego do współbieżności (jak kod @ outlyer) Jeśli chcesz uzyskać oryginalny rozmiar, umieść Target.SIZE_ORIGINA jako mój kod. Nie używaj -1, -1
źródło
Nowsza wersja:
źródło