Android-Universal-Image-Loader開源項目的簡要說明及使用實例


Android-Universal-Image-Loader開源項目的源碼地址:https://github.com/nostra13/Android-Universal-Image-Loader

 

一.核心類的說明及相關參數的說明

 

ImageLoaderConfiguration

1.作用:為ImageLoader提供下載配置

2.構造方法:

/**
     * ImageLoaderConfiguration 創建的兩種方式。
     */
    // 創建默認的ImageLoaderConfiguration
    ImageLoaderConfiguration configuration_0 = ImageLoaderConfiguration
            .createDefault(this);

    // 使用DisplayImageOptions.Builder()創建DisplayImageOptions
    ImageLoaderConfiguration configuration_1 = new ImageLoaderConfiguration.Builder(
            this).threadPriority(Thread.NORM_PRIORITY - 2)
            .denyCacheImageMultipleSizesInMemory()
            .discCacheFileNameGenerator(new Md5FileNameGenerator())
            .tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging()
            .build();

3.常用方法:

 

/**
 *當同一個Uri獲取不同大小的圖片,緩存到內存時,只緩存一個。默認會緩存多個不同的大小的相同圖片
 */
 denyCacheImageMultipleSizesInMemory()
/**
     * 設置本地圖片緩存
     * @param discCache
     */
    discCache(DiscCacheAware discCache) 
              
    DiscCacheAware 類型(在com.nostra13.universalimageloader.cache.disc.impl包下能找到如下的類):
        FileCountLimitedDiscCache(File cacheDir, int maxFileCount):設置緩存路徑和緩存文件的數量,超過數量后,old將被刪除
        FileCountLimitedDiscCache(File cacheDir,FileNameGenerator fileNameGenerator,int maxFileCount):第二個參數是通過圖片的url生成的唯一文件名。
        LimitedAgeDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, long maxAge) :第二個參數同上
        LimitedAgeDiscCache(File cacheDir, long maxAge):maxAge為定義的時間,超過時間后,圖片將被刪除
        TotalSizeLimitedDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, int maxCacheSize) :第二個參數同上   
        TotalSizeLimitedDiscCache(File cacheDir, int maxCacheSize) :定義緩存的大小,如超過了,就會刪除old圖片。
        UnlimitedDiscCache(File cacheDir) :緩存沒有限制
        UnlimitedDiscCache(File cacheDir, FileNameGenerator fileNameGenerator):第二個參數同上
/**
     * 設置圖片保存到本地的參數
     * @param maxImageWidthForDiscCache 保存的最大寬度
     * @param maxImageHeightForDiscCache 保存的最大高度
     * @param compressFormat    保存的壓縮格式
     * @param compressQuality 提示壓縮的程度,有0-100.想png這種圖片無損耗,就不必設置了
     */
    discCacheExtraOptions(int maxImageWidthForDiscCache,
            int maxImageHeightForDiscCache,
            android.graphics.Bitmap.CompressFormat compressFormat,
            int compressQuality)
/**
     * 設置緩存文件的數量
    * @param maxFileCount 數量
     */
    discCacheFileCount(int maxFileCount)
/**
       * 設置緩存的大小
       * @param maxCacheSize 大小
      */
        discCacheSize(int maxCacheSize)
/**
     * 設置緩存文件的名字
     * @param fileNameGenerator
     */
    discCacheFileNameGenerator(FileNameGenerator fileNameGenerator)
             fileNameGenerator:
                      HashCodeFileNameGenerator() :通過HashCode將url生成文件的唯一名字
                      Md5FileNameGenerator():通過Md5將url生產文件的唯一名字
/**
  * 啟動Log信息記錄,用於查看異常信息
  */
    enableLogging()
/**
     * 設置緩存信息
     * @param maxImageWidthForMemoryCache 緩存圖片的最大寬度,默認為手機的屏幕寬度
     * @param maxImageHeightForMemoryCache 緩存圖片的最大高度,默認為手機的屏幕寬度
     */
    memoryCacheExtraOptions(int maxImageWidthForMemoryCache, int maxImageHeightForMemoryCache)
/**
     * 添加個線程池,進行下載
     * @param executor 線程池
     * 如果進行了這個設置,那么threadPoolSize(int),threadPriority(int),tasksProcessingOrder(QueueProcessingType)
     * 將不會起作用
     */
     taskExecutor(Executor executor)
/**
       * 設置用於顯示圖片的線程池大小
      * @param threadPoolSize
       */
      threadPoolSize(int threadPoolSize)
/**
      * 設置線程的優先級
      * @param threadPriority
       */
      threadPriority(int threadPriority)
/**
      * 設置圖片下載和顯示的工作隊列排序
       * @param tasksProcessingType
       */
      tasksProcessingOrder(QueueProcessingType tasksProcessingType)
/**
      * 下載緩存圖片
    * @param executorForCachedImages
    */
     taskExecutorForCachedImages(Executor executorForCachedImages)

 

DisplayImageOptions

1.作用:用於設置圖片顯示的類。

2.構造方法:

/**
         * DisplayImageOptions 創建的兩種方式。
         */
        // 創建默認的DisplayImageOptions
        DisplayImageOptions option_0 = DisplayImageOptions.createSimple();

        // 使用DisplayImageOptions.Builder()創建DisplayImageOptions
        DisplayImageOptions option_1 = new DisplayImageOptions.Builder()
                .showStubImage(R.drawable.ic_launcher)
                .showImageOnFail(R.drawable.ic_error)
                .showImageForEmptyUri(R.drawable.ic_empty).cacheInMemory()
                .cacheOnDisc().displayer(new RoundedBitmapDisplayer(20))
                .build();

3.常用方法:

//設置圖片在下載期間顯示的圖片
    showStubImage(R.drawable.ic_launcher)
    
    //設置圖片Uri為空或是錯誤的時候顯示的圖片
    showImageForEmptyUri(R.drawable.ic_empty)
    
    //設置圖片加載/解碼過程中錯誤時候顯示的圖片
    showImageOnFail(R.drawable.ic_error)
    
    //設置圖片在下載前是否重置,復位
    resetViewBeforeLoading()
    
    //設置下載的圖片是否緩存在內存中
    cacheInMemory()
    
    //設置下載的圖片是否緩存在SD卡中
    cacheOnDisc()
    
    //設置圖片的解碼類型
    bitmapConfig(Bitmap.Config.RGB_565)
    
    //設置圖片的解碼配置
    decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)
    
    //設置圖片下載前的延遲
    delayBeforeLoading(int delayInMillis) 
    
    //設置額外的內容給ImageDownloader
    extraForDownloader(Object extra)
    
    //設置圖片加入緩存前,對bitmap進行設置
    preProcessor(BitmapProcessor preProcessor)
    
    //設置顯示前的圖片,顯示后這個圖片一直保留在緩存中
    postProcessor(BitmapProcessor postProcessor) 
    
    //設置圖片以如何的編碼方式顯示
    imageScaleType(ImageScaleType imageScaleType)
/**
     * 設置圖片的顯示方式
     * @param displayer 
     */
    displayer(BitmapDisplayer displayer)
        displayer:
              RoundedBitmapDisplayer(int roundPixels)設置圓角圖片
              FakeBitmapDisplayer()這個類什么都沒做
              FadeInBitmapDisplayer(int durationMillis)設置圖片漸顯的時間
       SimpleBitmapDisplayer()正常顯示一張圖片
/**
 * 圖片的縮放方式
 * @param imageScaleType
 */
    imageScaleType(ImageScaleType imageScaleType)
         imageScaleType:
                 EXACTLY :圖像將完全按比例縮小的目標大小
                   EXACTLY_STRETCHED:圖片會縮放到目標大小完全
                   IN_SAMPLE_INT:圖像將被二次采樣的整數倍
                   IN_SAMPLE_POWER_OF_2:圖片將降低2倍,直到下一減少步驟,使圖像更小的目標大小
                   NONE:圖片不會調整

 

二.簡要使用的示例

MyApplication
package com.ryantang.rtimageloader;

import android.app.Application;

import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
/**
 * 初始化ImageLoaderConfiguration
 * 
 * @author hsx
 * @time 2013-12-5下午05:38:43
 */
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        
        // This configuration tuning is custom. You can tune every option, you may tune some of them, 
        // or you can create default configuration by
        //  ImageLoaderConfiguration.createDefault(this);
        // method.
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
                .threadPriority(Thread.NORM_PRIORITY - 2)//設置線程的優先級
                .denyCacheImageMultipleSizesInMemory()//當同一個Uri獲取不同大小的圖片,緩存到內存時,只緩存一個。默認會緩存多個不同的大小的相同圖片
                .discCacheFileNameGenerator(new Md5FileNameGenerator())//設置緩存文件的名字
                .discCacheFileCount(60)//緩存文件的最大個數
                .tasksProcessingOrder(QueueProcessingType.LIFO)// 設置圖片下載和顯示的工作隊列排序
                .enableLogging() //是否打印日志用於檢查錯誤
                .build();
        
        //Initialize ImageLoader with configuration
        ImageLoader.getInstance().init(config);
    }
}
AnimateFirstDisplayListener
package com.ryantang.rtimageloader.listener;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;

public class AnimateFirstDisplayListener extends SimpleImageLoadingListener {

    public static  List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());

    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        if (loadedImage != null) {
            ImageView imageView = (ImageView) view;
            boolean firstDisplay = !displayedImages.contains(imageUri);
            if (firstDisplay) {
                FadeInBitmapDisplayer.animate(imageView, 500);
                displayedImages.add(imageUri);
            }
        }
    }
}
ItemAdapter
package com.ryantang.rtimageloader.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.ryantang.rtimageloader.R;
import com.ryantang.rtimageloader.listener.AnimateFirstDisplayListener;

public class ItemAdapter extends BaseAdapter {
    DisplayImageOptions options;

    private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();

    String[] imageUrls;
    Context context;

    public ItemAdapter(String[] imageUrls, Context context) {
        super();
        this.imageUrls = imageUrls;
        this.context = context;
        options = new DisplayImageOptions.Builder()
        .showStubImage(R.drawable.ic_launcher)//設置圖片在下載期間顯示的圖片
        .showImageForEmptyUri(R.drawable.ic_launcher)//設置圖片Uri為空或是錯誤的時候顯示的圖片
         .showImageOnFail(R.drawable.ic_launcher)//設置圖片加載/解碼過程中錯誤時候顯示的圖片
         .cacheInMemory(true)//是否緩存都內存中
         .cacheOnDisc(true)//是否緩存到sd卡上
         .displayer(new RoundedBitmapDisplayer(20))
                .build();
    }

    private class ViewHolder {
        public TextView text;
        public ImageView image;
    }

    @Override
    public int getCount() {
        return imageUrls.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.item_list_image, parent, false);
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.text);
            holder.image = (ImageView) convertView.findViewById(R.id.image);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.text.setText("Item " + (position + 1));
        // ImageLoader
        ImageLoader imageLoader = ImageLoader.getInstance();
        imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener);

        return convertView;
    }
}

示例源碼地址:http://download.csdn.net/detail/abc13939746593/6664143


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM