1. 程式人生 > >使用 universalimageloader 緩存圖片的配置類及使用方法

使用 universalimageloader 緩存圖片的配置類及使用方法

oid test appcompat private etop onf for time ava

0、gradle 配置


dependencies {
compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
testCompile ‘junit:junit:4.12‘
compile ‘com.android.support:appcompat-v7:25.1.1‘
compile ‘com.squareup.okhttp3:okhttp:3.3.0‘ //okttp依賴
compile ‘com.nostra13.universalimageloader:universal-image-loader:1.9.5‘
}

一、配置類

/**
 * @author: qndroid
 * @function: 初始化UniverImageLoader, 並用來加載網絡圖片
 * @date: 16/6/27
 */
public class ImageLoaderUtil {

    private static final int THREAD_COUNT = 2;
    private static final int PRIORITY = 2;
    private static final int MEMORY_CACHE_SIZE = 2 * 1024 * 1024;
    private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024;
    private static final int CONNECTION_TIME_OUT = 5 * 1000;
    private static final int READ_TIME_OUT = 30 * 1000;

    private static ImageLoaderUtil mInstance = null;
    private static ImageLoader mLoader = null;


    public static ImageLoaderUtil getInstance(Context context) {
        if (mInstance == null) {
            synchronized (ImageLoaderUtil.class) {
                if (mInstance == null) {
                    mInstance = new ImageLoaderUtil(context);
                }
            }
        }
        return mInstance;
    }

    /**
     * 私有構造方法完成初始化工作
     *
     * @param context
     */
    private ImageLoaderUtil(Context context) {

        ImageLoaderConfiguration config = new ImageLoaderConfiguration
                .Builder(context)
                .threadPoolSize(THREAD_COUNT)
                .threadPriority(Thread.NORM_PRIORITY - PRIORITY)
                .denyCacheImageMultipleSizesInMemory()
                //.memoryCache(new UsingFreqLimitedMemoryCache(MEMORY_CACHE_SIZE))
                .memoryCache(new WeakMemoryCache())
                .diskCacheSize(DISK_CACHE_SIZE)
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//將保存的時候的URI名稱用MD5 加密
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .defaultDisplayImageOptions(getDefaultOptions())
                .imageDownloader(new BaseImageDownloader(context, CONNECTION_TIME_OUT, READ_TIME_OUT))
                .writeDebugLogs()
                .build();

        ImageLoader.getInstance().init(config);
        mLoader = ImageLoader.getInstance();
    }

    //load the image
    public void displayImage(ImageView imageView, String path,
                             ImageLoadingListener listener, DisplayImageOptions options) {
        if (mLoader != null) {
            mLoader.displayImage(path, imageView, options, listener);
        }
    }

    //load the image
    public void displayImage(ImageView imageView, String path, ImageLoadingListener listener) {
        if (mLoader != null) {
            mLoader.displayImage(path, imageView, listener);
        }
    }

    public void displayImage(ImageView imageView, String path) {
        displayImage(imageView, path, null);
    }

    /**
     * 默認的圖片顯示Options,可設置圖片的緩存策略,編解碼方式等,非常重要
     *
     * @return
     */
    private DisplayImageOptions getDefaultOptions() {
        DisplayImageOptions options = new
                DisplayImageOptions.Builder()
                .cacheInMemory(true)//設置下載的圖片是否緩存在內存中, 重要,否則圖片不會緩存到內存中
                .cacheOnDisk(true)//設置下載的圖片是否緩存在SD卡中, 重要,否則圖片不會緩存到硬盤中
                .considerExifParams(true)  //是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//設置圖片以如何的編碼方式顯示
                .bitmapConfig(Bitmap.Config.RGB_565)//設置圖片的解碼類型//
                .decodingOptions(new BitmapFactory.Options())//設置圖片的解碼配置
                .resetViewBeforeLoading(true)//設置圖片在下載前是否重置,復位
                .build();
        return options;
    }

    public DisplayImageOptions getOptionsWithNoCache() {

        DisplayImageOptions options = new
                DisplayImageOptions.Builder()
                //.cacheInMemory(true)//設置下載的圖片是否緩存在內存中, 重要,否則圖片不會緩存到內存中
                //.cacheOnDisk(true)//設置下載的圖片是否緩存在SD卡中, 重要,否則圖片不會緩存到硬盤中
                .considerExifParams(true)  //是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//設置圖片以如何的編碼方式顯示
                .bitmapConfig(Bitmap.Config.RGB_565)//設置圖片的解碼類型//
                .decodingOptions(new BitmapFactory.Options())//設置圖片的解碼配置
                .resetViewBeforeLoading(true)//設置圖片在下載前是否重置,復位
                .displayer(new FadeInBitmapDisplayer(400))
                .build();
        return options;
    }
}

  

二、使用方法

// 聲明

private ImageLoaderUtil mImageLoader;

//傳入 context 實例化
mImageLoader = ImageLoaderUtil.getInstance(mContext);

//顯示圖片 第一個參數為 imageview 第二個參數為遠程的url

mImageLoader.displayImage(mImageViews[i], mHeaderValue.middle.get(i));

使用 universalimageloader 緩存圖片的配置類及使用方法