分享一下自己做的一個圖片載入庫XImageLoader

weixin_34249678發表於2017-02-18

這是一個我自己做的一個Android的自定義圖片載入庫,主要參考了網上一些大神寫過的一些圖片載入庫,再結合自己的一些想法理解去做了一個較為完整的圖片載入庫。當然程式碼中也會存在一些不足的情況,例如程式碼架構方面不是非常的完善。希望大家提出意見,一起去改進!

注意:這是一個用於學習圖片載入與快取的庫,不推薦使用在實際專案之中!

Github地址:https://github.com/XuDeveloper/XImageLoader

如果你想改進這個圖片載入庫,歡迎在GitHub上fork這個專案然後pull request給我!如果你喜歡它,請給這個專案一個star或者關注我的GitHub!謝謝你們的支援!

匯入

Android Studio

  allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
  }

  dependencies {
        compile 'com.github.XuDeveloper:XImageLoader:v1.0'
  }

Eclipse

可以複製原始碼到你的專案中!

使用

預設用法:


    // 非同步介面呼叫
    XImageLoader.build(context).imageview(ImageView).load(imageUrl);
    // 載入本地檔案,你需要使用這樣的格式:"file:///address"
    XImageLoader.build(context).imageview(ImageView).load("file:///address");

或者:


    // 同步介面呼叫(需要執行在一條新執行緒中)
    Bitmap bitmap = XImageLoader.build(context).imageview(ImageView).getBitmap(imageUrl);

你可以選擇是否快取或者自定義(使用XImageLoaderConfig):


    XImageLoader.build(context).imageview(isMemoryCache, isDiskCache, ImageView).load(imageUrl);

    XImageLoader.build(context).imageview(isDoubleCache, ImageView).load(imageUrl);
    
    // 具體配置
    XImageLoaderConfig config = new XImageLoaderConfig();
    config.setCache(new DoubleCache(context));
    config.setLoader(new OkhttpImageLoader());
    config.setLoadingResId(R.drawable.image_loading);
    config.setFailResId(R.drawable.image_fail);
    XImageLoader.build(context).imageview(config, ImageView).load(imageUrl);

你需要AndroidManifest.xml中設定許可權:


    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

如果你使用的是Android 6.0以上的裝置,你需要動態設定許可權:


    XImageLoader.verifyStoragePermissions(activity);

程式碼架構設計:
採用流式程式設計寫法,將載入一張圖片分為以下幾步:
1.初始化一些基本設定(XImageLoaderConfig ),如是否加入快取,設定載入時顯示的圖片資源以及載入失敗時顯示的圖片資源還有圖片載入器ImageLoader;(如果不設定下面會自動設定)
2.設定需要載入的ImageView;
3.設定需要載入的圖片路徑,可以是網路上的圖片,也可以是手機本地圖片,如果前面沒設定ImageLoader,在這裡就可以根據路徑來動態選擇載入哪個特定的ImageLoader;
載入圖片有兩種方法,一種是同步方法獲取圖片Bitmap,另一種是線上程池中非同步載入圖片。

載入圖片的優化方法:
1.加入快取機制,包括LruCache以及DiskLruCache;
2.載入時先預讀取圖片,根據尺寸計算inSampleSize,對圖片進行適當壓縮,防止OOM;
3.採用執行緒池載入。

需要進一步優化的地方:
讀取需要載入的ImageView尺寸時用到了反射的方法,影響了一定的效率;

相關文章