2013-04-15 10 views
8

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

5

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.

http://oodlestechnologies.com/blogs/Downloading-and-Retrieving-Files-on-SD-card-in-Android-using-Android-SDK-in-Eclipse

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.

+0

'.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

+0

Tutaj, gdy przechodzę nazwę katalogu w 'new UnlimitedDiscCache (cacheDir)' niż ten katalog nie jest tworzony w sdcard Dlaczego się stało? –

+0

czy dodałeś uprawnienie do zapisu w pliku manifestu. sprawdź czy (cacheDir.exists()) {log some message} – Raghunandan

2

Tam jest loadImage(String uri, ImageLoadingListener listener), myślę, że można go nazwać null dla słuchacza, jeśli go nie potrzebujesz.

+0

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

+0

Tak, próbowałem już wcześniej, nie pomogę. – scott

11

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 
    } 
}); 
+0

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

0

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.

Powiązane problemy