Universal-image-loader圖片加載開源框架基本使用

universal-imageloader加載圖片的特色:html

   基本特色以下,android

  1. 多線程下載圖片,圖片能夠來源於網絡,文件系統,項目文件夾assets中以及drawable中等緩存

  2. 支持隨意的配置ImageLoader,例如線程池,圖片下載器,內存緩存策略,硬盤緩存策略,圖片顯示選項以及其餘的一些配置網絡

  3. 支持圖片的內存緩存,文件系統緩存或者SD卡緩存多線程

  4. 支持圖片下載過程的監聽app

  5. 根據控件(ImageView)的大小對Bitmap進行裁剪,減小Bitmap佔用過多的內存ide

  6. 較好的控制圖片的加載過程,例如暫停圖片加載,從新開始加載圖片,通常使用在ListView,GridView中,滑動過程當中暫停加載圖片,中止滑動的時候去加載圖片ui

  7. 提供在較慢的網絡下對圖片進行加載spa

使用方法:.net

   首先在自定義的application的oncreate方法中建立UIL的配置參數,能夠直接使用createDefault()方法建立一個默認的ImageLoaderConfiguration,固然咱們還能夠本身設置ImageLoaderConfiguration,設置以下

File cacheDir = StorageUtils.getCacheDirectory(context);  
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)  
        .memoryCacheExtraOptions(480, 800) // default = device screen dimensions  
        .diskCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)  
        .taskExecutor(...)  
        .taskExecutorForCachedImages(...)  
        .threadPoolSize(3) // default  
        .threadPriority(Thread.NORM_PRIORITY - 1) // default  
        .tasksProcessingOrder(QueueProcessingType.FIFO) // default  
        .denyCacheImageMultipleSizesInMemory()  
        .memoryCache(new LruMemoryCache(2 * 1024 * 1024))  
        .memoryCacheSize(2 * 1024 * 1024)  
        .memoryCacheSizePercentage(13) // default  
        .diskCache(new UnlimitedDiscCache(cacheDir)) // default  
        .diskCacheSize(50 * 1024 * 1024)  
        .diskCacheFileCount(100)  
        .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default  
        .imageDownloader(new BaseImageDownloader(context)) // default  
        .imageDecoder(new BaseImageDecoder()) // default  
        .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default  
        .writeDebugLogs()  
        .build();

在項目中不須要每個都本身設置,通常使用createDefault()建立的ImageLoaderConfiguration就能使用,而後調用ImageLoader的init()方法將ImageLoaderConfiguration參數傳遞進去,ImageLoader使用單例模式。

     ImageLader提供了幾個圖片加載的方法,主要是這幾個displayImage(), loadImage(),loadImageSync(),loadImageSync()方法是同步的,android4.0有個特性,網絡操做不能在主線程,因此loadImageSync()方法咱們就不去使用。

在實際的開發中,咱們會用到DisplayImageOptions,他能夠配置一些圖片顯示的選項,好比圖片在加載中ImageView顯示的圖片,是否須要使用內存緩存,是否須要使用文件緩存等等,可供咱們選擇的配置以下:

DisplayImageOptions options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.default_cover)
.showImageForEmptyUri(R.drawable.default_cover)
.showImageOnFail(R.drawable.default_cover)
.cacheInMemory(true)
.cacheOnDisc(true)
.imageScaleType(ImageScaleType.NONE)
.bitmapConfig(Bitmap.Config.RGB_565)//設置爲RGB565比起默認的ARGB_8888要節省大量的內存.delayBeforeLoading(100)//載入圖片前稍作延時能夠提升總體滑動的流暢度.build();

loadImage()加載圖片的方法:

ImageLoader.getInstance().loadImage(imageUrl, mImageSize, options, new SimpleImageLoadingListener(){  
  
            @Override  
            public void onLoadingComplete(String imageUri, View view,  
                    Bitmap loadedImage) {  
                super.onLoadingComplete(imageUri, view, loadedImage);  
                mImageView.setImageBitmap(loadedImage);  
            }  
              
        });

使用DisplayImage()方法更加方便:

 ImageLoader.getInstance().displayImage(imageUrl, mImageView, options);

在使用listview或者gridview加載圖片的時候每每會須要設置滑動時圖片加載監聽事件:

listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));  
        gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));

第一個參數就是咱們的圖片加載對象ImageLoader, 第二個是控制是否在滑動過程當中暫停加載圖片,若是須要暫停傳true就好了,第三個參數控制猛的滑動界面的時候圖片是否加載

基本的圖片加載使用上述方法就能夠實現了,還有一些關於加載圖片出現OOM的一些問題,經過以下設置基本能夠解決:

 

  • 減小線程池中線程的個數,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推薦配置1-5

  • 在DisplayImageOptions選項中配置bitmapConfig爲Bitmap.Config.RGB_565,由於默認是ARGB_8888, 使用RGB_565會比使用ARGB_8888少消耗2倍的內存

  • 在ImageLoaderConfiguration中配置圖片的內存緩存爲memoryCache(new WeakMemoryCache()) 或者不使用內存緩存

  • 在DisplayImageOptions選項中設置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)

若是有什麼問題能夠在評論上相互交流,共同進步哈

 關於listview加載圖片出現卡頓現象的緣由能夠參考這篇博文:http://www.cnblogs.com/wuxilin/p/universal_image_loader_onscroll_reload.html

該文章參考這篇博文:http://blog.csdn.net/xiaanming/article/details/26810303

相關文章
相關標籤/搜索