o ile mi wiadomo, uniwersalny program ładujący obrazy zapewniają 2 rodzaje metod wyświetlania obrazów. imageLoader.loadImage i imageLoader.displayImage. Ale te dwie metody muszą wiązać się z elementem interfejsu do wyświetlenia. Czy mogę po prostu pobrać pliki z pamięci podręcznej w wątku (do przyszłego wyświetlenia). Nie muszę już wyświetlać tego obrazu.Jak mogę po prostu pobrać obraz z uniwersalnym nośnikiem obrazu?
Odpowiedz
Czy mogę po prostu pobrać pliki z pamięci podręcznej w wątku (do przyszłego wyświetlenia). Nie muszę już wyświetlać tego obrazu.
Możesz pobierać pliki za pomocą Executora lub tworzenia wątku. Nie musisz używać uniwersalnego imageloadera.
http://developer.android.com/reference/java/util/concurrent/Executor.html.
Można również użyć menedżera pobierania i zapisać plik na sdcard. Możesz odzyskać to samo do późniejszego wykorzystania.
celu buforowania bitmapy można zapisywać obrazy do folderu w sdcard.
buforowania bitmapy
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html.
Buforuje mapy bitowe w pamięci lub na dysku. Link zawiera szczegóły dotyczące tematu.
W zasadzie używasz UIL ofr wyświetlając obrazy w widoku listy lub grdiview. Aby użyć UIL w widoku listy lub gridview, możesz zrobić tak, jak poniżej.
https://github.com/nostra13/Android-Universal-Image-Loader. Opiera się na Lazy List (działa na tej samej zasadzie). Ale ma wiele innych konfiguracji. Możesz wyświetlić obraz błędu, jeśli zakończy się niepowodzenie. Może wyświetlać obrazy z zaokrąglonymi rogami. Może buforować na dysku lub w pamięci. Może kompresować obraz.
w Twojej konstruktora adaptera
File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder");
// Get singletone instance of ImageLoader
imageLoader = ImageLoader.getInstance();
// Create configuration for ImageLoader (all options are optional)
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
// You can pass your own memory cache implementation
.discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())
.enableLogging()
.build();
// Initialize ImageLoader with created configuration. Do it once.
imageLoader.init(config);
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_id)//display stub image
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(20))
.build();
W swojej getView()
ImageView image=(ImageView)vi.findViewById(R.id.imageview);
imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options
można skonfigurować z innych opcji do własnych potrzeb.
Wraz z leniwym ładowaniem/Universal Image Loader można wyświetlić uchwyt dla płynnego przewijania i wydajności. http://developer.android.com/training/improving-layouts/smooth-scrolling.html.
Tam jest loadImage(String uri, ImageLoadingListener listener)
, myślę, że można go nazwać null dla słuchacza, jeśli go nie potrzebujesz.
Wyjaśnienie java.lang.IllegalArgumentException: błędne argumenty zostały przekazane do metody displayImage() (odwołanie do ImageView nie może mieć wartości NULL). Właśnie sprawdziłem, przekazując null w miejsce obrazu. przekazanie wartości null jako parametru nie pomoże. – Raghunandan
Tak, próbowałem już wcześniej, nie pomogę. – scott
Nadal można używać UIL
. Na podstawie użytego poniżej obrazu obrazy zostaną zapisane w pamięci podręcznej.
Patrz tutaj - https://github.com/nostra13/Android-Universal-Image-Loader
// Załaduj obraz, dekoduje go i powrócić do Bitmap Bitmap do callback
imageLoader.loadImage(imageUri, displayOptions, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Do whatever you want with Bitmap
}
});
Co masz na myśli przez "return Bitmap to callback"? Modyfikuję mapę bitową loadedImage, ale nie wiem jak ją wyświetlić (zmodyfikowana wersja). Czy mógłbyś rozwinąć? – v4r
Dodawanie do @Robin Srivastava za odpowiedź:
Musisz również instancję ImageLoader
w kontekście, na przykład: imageLoader = ImageLoader.getInstance();
, aby móc korzystać z metody loadImage
. Parametr displayOptions
jest opcjonalny, więc możesz go wykluczyć, jeśli zajdzie taka potrzeba.
'.discCache (new UnlimitedDiscCache (cacheDir)) // Możesz przekazać własną implementację pamięci podręcznej dysku .discCacheFileNameGenerator (new HashCodeFileNameGenerator())' tego właśnie chcę, thx. – scott
Tutaj, gdy przechodzę nazwę katalogu w 'new UnlimitedDiscCache (cacheDir)' niż ten katalog nie jest tworzony w sdcard Dlaczego się stało? –
czy dodałeś uprawnienie do zapisu w pliku manifestu. sprawdź czy (cacheDir.exists()) {log some message} – Raghunandan