Glide框架

新根發表於2017-05-20

Android Glide4 非同步圖片框架

介紹

Glide是一個面向Android快速和高效的開源媒體管理(open source media management )和圖片載入(image loading )的框架,使用指定的介面很容易在一個案例中實現媒體解碼(media decoding),記憶體(memory)和磁碟快取(disk caching),資源池(resource pooling)的功能。

Glide支視三種型別的資源:視訊,圖片,動畫GIF,對其進行獲取,解碼,顯示操作。Glide擁有靈活的API,允許開發人員自定義新增網路堆疊(Network stack)。Glide預設使用HttpUrlConnection的網路堆疊,也可以使用Google的Volley庫和Squareas的OkHttp庫來替代。

Glide的主要重點是平滑和快速的滾動任何型別的影象列表。同時,Glide也高效的適用於這些情況,例如:獲取,調整大小,顯示遠端影象。

配置Glide


  1. 在Gradle中引入:

      compile 'com.github.bumptech.glide:glide:4.0.0-RC0'
      annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC0'
  2. 若是使用Glide 以前版本,下載靜態的jar包,點選版本下載

  3. 在專案中proguard中混淆規則:

     -keep public class * implements com.bumptech.glide.module.GlideModule
     -keep public class * extends com.bumptech.glide.AppGlideModule
     -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
           **[] $VALUES;
           public *;
      }
    
    
    # for DexGuard only 
    
    -keepresourcexmlelements manifest/application/meta-data@value=GlideModule

    注意點:在最新V4版本中,若是AppGlideModule子類中isManifestParsingEnabled()返回false,則不需要AndroidManifest.xml中配置GlideModule。

    更多配置規則,請閱讀 Configuration wiki

How do I Use Glide?


這裡列舉兩個簡單Glide V4使用案例。

  1. 單個ImageView使用Glide載入網路上的百度圖片:

     public void onCreate(Bundle savedInstanceState) {
           ...
         ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
    
        Glide.with(this).load("https://www.baidu.com/img/bd_logo1.png").into(imageView);
    }   
    
  2. RecyclerView中ImageView使用Glide’s generated API,AppGlideModule的配置未貼出 :

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        MovieData movieData = list.get(position);
        holder.getTitle().setText(movieData.getTitle());
        imageLoader.loadImage(movieData.getImages(),holder.getNetworkImageView());
    
        //載入未獲取圖片之前的空白圖片,發生異常的圖片,圖片資源
        GlideApp.with(context)
             .load(movieData.getImages())
             .placeholder(R.mipmap.ic_launcher)
             .error(R.mipmap.ic_launcher)
             .into(holder.getNetworkImageView());
    }

    更多詳情,請閱讀GitHub wiki javadocs,以及。

Status(狀態):


在3.0 分支上的Version 3是一個穩定的公開版本,用於Google的多個開源專案,包括 Android Camera app 和2014年的Google IO app。當前版本4 是在分支中開發。

Compatibility(相容)


  • Android SDK :Glide最低要求API 10

  • OkHttp 2.x : 這裡是有自行選擇可用的依賴 okhttp- integration庫 , 請閱讀 Integration Libraries 頁面.

  • OkHttp 3.x : 這裡是有自行選擇可用的依賴 okhttp3- integration庫 , 請閱讀 Integration Libraries 頁面.

  • Volley : 這裡是有自行選擇可用的依賴 volley- integration庫 , 請閱讀 Integration Libraries 頁面.

  • Round Pictures :

    CircleImageView/CircularImageView/RoundedImageView已經知道的問題,結合使用TransitionDrawable ( .crossFade() 和 .thumbnail() 或者 .placeholder() )和動畫GiF,解決方式:使用在v4庫下的BitmapTransformation( .circleCrop() )或者 .dontAnimate().

  • Huge Images(maps,comic strips) :

    Glide可以通過低階採用(downsampling)來載入大圖片,但是不支援縮放和平滑 ImageView ,因為他們需要特殊資源優化(例如 平鋪)來工作,才能避免OutOfMemoryErrors。

資源參考


  • Glide 專案: https://github.com/bumptech/glide

  • Glide wiki : https://github.com/bumptech/glide/wiki

  • 各種官方案例

    • Flickr案例:在Flick的公共API中,使用者搜尋關鍵字所匹配的影象,然後下載前幾百次命中,並以幾種不同的大小顯示它們。

    • Gallery案例:載入手機本地儲存的影象和視屏靜止影象,在RecyclerView水平滾動的顯示。

    • Giphy案例:使用Giphy`s的公開API來下載資料和流行的GIFs動畫,且在垂直列表中顯示他們。

    • SVG案例:通過Resources和網路載入SVG資料,且使用自定義的解碼器(custom decoder)和drawble來顯示SVG。

    • Google I/O案例:2014年Google I/O App使用Glide來實現各種場景下的使用。

相關文章