Glide初步使用

Glide簡介:

        Glide 是 Google 員工的開源項目, Google I/O 上被推薦使用,一個高效、開源、Android設備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協議發佈。Glide具有獲取、解碼和展示視頻劇照、圖片、動畫等功能,它還有靈活的API,這些API使開發者能夠將Glide應用在幾乎任何網絡協議棧裏。創建Glide的主要目的有兩個,一個是實現平滑的圖片列表滾動效果,另一個是支持遠程圖片的獲取、大小調整和展示。

 gitHub地址:https://github.com/bumptech/glide

Glide特點

  •  使用簡單
  • 可配置度高,自適應程度高
  • 支持常見圖片格式 Jpg png gif webp
  • 支持多種數據源  網絡、本地、資源、Assets 等
  • 高效緩存策略    支持Memory和Disk圖片緩存 默認Bitmap格式採用RGB_565內存使用至少減少一半
  • 生命週期集成   根據Activity/Fragment生命週期自動管理請求
  • 高效處理Bitmap  使用Bitmap Pool使Bitmap複用,主動調用recycle回收需要回收的Bitmap,減小系統回收壓力

Glide簡單使用

1.)添加引用 build.gradle 中添加配置

  compile 'com.github.bumptech.glide:glide:3.7.0'

2.)設置綁定生命週期

我們可以更加高效的使用Glide提供的方式進行綁定,這樣可以更好的讓加載圖片的請求的生命週期動態管理起來

  Glide.with(Context context);// 綁定Context
  Glide.with(Activity activity);// 綁定Activity
  Glide.with(FragmentActivity activity);// 綁定FragmentActivity
  Glide.with(Fragment fragment);// 綁定Fragment

 

3. )簡單的加載圖片實例

 Glide.with(this).load(imageUrl).into(imageView);

4.)設置加載中以及加載失敗圖片

api裏面對placeholder()、error()函數中有多態實現 用的時候可以具體的熟悉一下

Glide.with(this).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);

5.)設置跳過內存緩存

 Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);

6.)設置下載優先級

Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);

7.)設置緩存策略

Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);

策略解說:

all:緩存源資源和轉換後的資源

none:不作任何磁盤緩存

source:緩存源資源

result:緩存轉換後的資源

8.)設置加載動畫

api也提供了幾個常用的動畫:比如crossFade()

  Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="500"
        android:fromAlpha="0.0"
        android:toAlpha="1.0"/>
</set>

9.)設置縮略圖支持

這樣會先加載縮略圖 然後在加載全圖

 Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);

10.)設置加載尺寸

 Glide.with(this).load(imageUrl).override(800, 800).into(imageView);

11.)設置動態轉換

 Glide.with(this).load(imageUrl).centerCrop().into(imageView);

    api提供了比如:centerCrop()、fitCenter()等函數也可以通過自定義Transformation,舉例說明:比如一個人圓角轉化器

複製代碼
 public class GlideRoundTransform extends BitmapTransformation {
        private float radius = 0f;
        public GlideRoundTransform(Context context) {
            this(context, 4);
        }

        public GlideRoundTransform(Context context, int dp) {
            super(context);
            this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
        }

        @Override
        protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
            return roundCrop(pool, toTransform);
        }

        private Bitmap roundCrop(BitmapPool pool, Bitmap source) {
            if (source == null) return null;

            Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
            if (result == null) {
                result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
            }
            Canvas canvas = new Canvas(result);
            Paint paint = new Paint();
            paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
            paint.setAntiAlias(true);
            RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
            canvas.drawRoundRect(rectF, radius, radius, paint);
            return result;
        }

        @Override
        public String getId() {
            return getClass().getName() + Math.round(radius);
        }
    }
複製代碼

 

具體使用

Glide.with(this).load(imageUrl).transform(new GlideRoundTransform(this)).into(imageView);

12.)設置要加載的內容

項目中有很多需要先下載圖片然後再做一些合成的功能,比如項目中出現的圖文混排,該如何實現目標下

        Glide.with(this).load(imageUrl).centerCrop().into(new SimpleTarget<GlideDrawable>() {
            @Override
            public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
                imageView.setImageDrawable(resource);
            }
        });

13 .)設置監聽請求接口

  Glide.with(this).load(imageUrl).listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                return false;
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                //imageView.setImageDrawable(resource);
                return false;
            }
        }).into(imageView);

 

設置監聽的用處 可以用於監控請求發生錯誤來源,以及圖片來源 是內存還是磁盤

15.)設置動態GIF加載方式

 Glide.with(this).load(imageUrl).asBitmap().into(imageView);//顯示gif靜態圖片
 Glide.with(this).load(imageUrl).asGif().into(imageView);//顯示gif動態圖片

 16.)緩存的動態清理

 Glide.get(this).clearDiskCache();//清理磁盤緩存 需要在子線程中執行
 Glide.get(this).clearMemory();//清理內存緩存  可以在UI主線程中進行

 

小結:

   以上是Glide的常規用法,基本上滿足開發需要了,然後再去學習一下其他相關知識。


發佈了22 篇原創文章 · 獲贊 32 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章