2013-03-25 35 views

Odpowiedz

37

Lazy List to leniwe ładowanie obrazów z karty SD lub z serwera przy użyciu adresów URL. To jest jak na żądanie ładowanie obrazów.

Obrazy można zapisywać w pamięci podręcznej na lokalnej karcie SD lub w pamięci telefonu. Adres URL jest uważany za klucz. Jeśli klucz znajduje się na karcie SD, wyświetlaj obrazy z karty SD, wyświetlaj obraz, pobierając go z serwera i przechowuj w pamięci podręcznej do wybranej lokalizacji. Można ustawić limit pamięci podręcznej. Możesz także wybrać własną lokalizację do przechowywania zdjęć w pamięci podręcznej. Pamięć podręczną można również wyczyścić.

Zamiast czekać na pobranie dużych obrazów, a następnie wyświetlanie leniwych list, ładuje obrazy na żądanie. Ponieważ obrazy są buforowane, możesz wyświetlać obrazy w trybie offline.

https://github.com/thest1/LazyList. Lazy Lista

W swojej getview

imageLoader.DisplayImage(imageurl, imageview); 

metoda imageLoader Wyświetlacz

public void DisplayImage(String url, ImageView imageView) //url and imageview as parameters 
    { 
    imageViews.put(imageView, url); 
    Bitmap bitmap=memoryCache.get(url); //get image from cache using url as key 
    if(bitmap!=null)   //if image exists 
     imageView.setImageBitmap(bitmap); //dispaly iamge 
    else //downlaod image and dispaly. add to cache. 
    { 
     queuePhoto(url, imageView); 
     imageView.setImageResource(stub_id); 
    } 
    } 

Alternatywą Lazy lista jest uniwersalna ładowarka Obraz

https://github.com/nostra13/Android-Universal-Image-Loader. Opiera się na Lazy List (działa na tej samej zasadzie). Ale ma wiele innych konfiguracji.Wolałbym użyć **** Universal Image Loader **** coz daje więcej opcji konfiguracyjnych. 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

Hej, raghu, nie mogę pobrać zdjęć z lokalnego użytkownika? Możesz pomóc? Http: //stackoverflow.com/questions/20109034/lazy-list-fetching-images-from-sdcard-local-url –

+0

wyjaśnienie, więc lista Lazy jest podobna do picassa czy poślizgu? – Fshamri

+1

@ user2198400 to biblioteki buforujące obraz. Tak, pomagają w leniwym ładowaniu. Przeczytaj także o mechanizmie recyklingu listview. – Raghunandan

5

Myślę, że jest odwrotnie. AFAIK, Lazy Loading to definicja, w której dane są wczytywane tylko wtedy, gdy jest to potrzebne i jest to dobra praktyka projektowa.

Uważam, że to samo dotyczy tego, tylko tym razem odnosi się do widoku listy.

Jeśli się mylę, popraw mnie.

2

Najlepszym przykładem leniwej listy są powiadomienia na Facebooku, wiadomości, prośby. podczas przewijania dane będą się ładować.

9

AFAIK, wyjaśnię ci przykład Jeśli lista zawiera wiele zdjęć z tekstem, załadowanie listy zajmie trochę czasu, ponieważ musisz pobrać obrazy i musisz je wypełnić na liście . Przypuśćmy, że jeśli twoja lista zawiera 100 obrazów Pobranie każdego obrazu i pokazanie go listitem zajmie dużo czasu. Aby użytkownik czekał na załadowanie zdjęć, nie jest przyjazny dla użytkownika. , więc to, co musimy zrobić. W tym momencie pojawia się leniwy list. Idea polega na tym, aby obrazy były ładowane w tle i wyświetlały tekst w czasie.

Każdy wie, że listview przetwarza swoje wyświetlenia dla każdego widoku. np. jeśli twoja lista zawiera 40 elemtnów, to listview nie przydzieli pamięci dla 40 elementów, zamiast alokować pamięć dla widocznych elementów, tzn. widzisz tylko 10 elementów naraz. więc listview przydzieli 10 pamiątkowych przedmiotów.

Kiedykolwiek przewiniesz widok, widok się odświeży. ponieważ utracisz swoje odniesienie do obrazów i musisz je pobrać. Aby tego uniknąć, buforowanie pojawia się w obrazie.

Ten przykład jest oparty na mojej wiedzy z listview, nie twierdzę, że jest to poprawne. W odpowiedzi może być coś nie tak, jeśli dowolne ciało znajdzie mnie poinformować.