Glide二次封裝庫的使用


更多代碼可以查詢本人GitHub:歡迎閱讀,star點起來。 
Glide二次封裝庫源碼

前言

為什么選擇Glide?

已經很方便了,為啥還要封裝?

  • 避免以后換框架的時候需要改的地方太多。如果封裝了只需要改封裝的方法而不會影響到所有的代碼。
  • 入口統一,所有圖片加載都在這一個地方管理,一目了然,即使有什么改動我也只需要改這一個類就可以了。
  • 雖然現在的第三方庫已經非常好用,但是如果我們看到第三方庫就拿來用的話,很可能在第三方庫無法滿足業務需求或者停止維護的時候,發現替換庫,工作量可見一斑。這就是不封裝在切庫時面臨的窘境!
  • 外部表現一致,內部靈活處理原則
  • 更多內容參考:如何正確使用開源項目?

初識Glide

Glide配置

1、 在build.gradle中添加依賴:

dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:19.1.0' }

2、混淆

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

3、權限 
如果是聯網獲取圖片或者本地存儲需要添加以下權限:

<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" />

Glide基本使用

Glide使用一個流接口(Fluent Interface)。用Glide完成一個完整的圖片加載功能請求,需要向其構造器中至少傳入3個參數,分別是:

  • with(Context context)- Context是許多Android API需要調用的, Glide也不例外。這里Glide非常方便,你可以任意傳遞一個Activity或者Fragment對象,它都可以自動提取出上下文。
  • load(String imageUrl) - 這里傳入的是你要加載的圖片的URL,大多數情況下這個String類型的變量會鏈接到一個網絡圖片。
  • into(ImageView targetImageView) - 將你所希望解析的圖片傳遞給所要顯示的ImageView。

example:

ImageView targetImageView = (ImageView) findViewById(R.id.imageView); String internetUrl = "http://i.imgur.com/DvpvklR.png"; Glide .with(context) .load(internetUrl) .into(targetImageView);

更多Glide詳細介紹可以看Glide官網以及Glide教程系列文章

如何進行二次封裝

明白了為什么封裝以及基本原理,接下來我們就要開工,大干一場。

先看一下本人封裝后的基本使用樣式:

ImageLoader.with(this) .url("http://img.yxbao.com/news/image/201703/13/7bda462477.gif") .placeHolder(R.mipmap.ic_launcher,false) .rectRoundCorner(30, R.color.colorPrimary) .blur(40) .into(iv_round);

從這里可以看出我們提供了四個構造器,這里注釋詳細說明了所有參數的用法及意義。

除了初始化,我們還需要在Application中重寫以下方法:

    @Override public void onTrimMemory(int level) { super.onTrimMemory(level); // 程序在內存清理的時候執行 ImageLoader.trimMemory(level); } @Override public void onLowMemory() { super.onLowMemory(); // 低內存的時候執行 ImageLoader.clearAllMemoryCaches(); }

上面這兩個方法會在下面ImageLoader中介紹到。

你所關心的類–ImageLoader

ImageLoader是封裝好所有的方法供用戶使用的,讓我們看看都有什么方法:

  • ImageLoader.init(Context context) //初始化
  • ImageLoader.trimMemory(int level);
  • ImageLoader.clearAllMemoryCaches();
  • ImageLoader.getActualLoader(); //獲取當前的loader
  • ImageLoader.with(Context context) //加載圖片
  • ImageLoader.saveImageIntoGallery(DownLoadImageService downLoadImageService) // 保存圖片到相冊
  • ImageLoader.pauseRequests() //取消請求
  • ImageLoader.resumeRequests() //回復的請求(當列表在滑動的時候,調用pauseRequests()取消請求,滑動停止時,調用resumeRequests()恢復請求 等等)
  • ImageLoader.clearDiskCache()//清除磁盤緩存(必須在后台線程中調用)
  • ImageLoader.clearMomoryCache(View view) //清除指定view的緩存
  • ImageLoader.clearMomory() // 清除內存緩存(必須在UI線程中調用)

github項目地址

圖片的各種設置信息–SingleConfig

我們所設置圖片的所有屬性都寫在這個類里面。下面我們詳細的看一下:

  • url(String url) //url
  • file(String filePath) //加載SD卡資源
  • file(File file) //加載SD卡資源
  • res(int resId) //加載drawable資源
  • content(String contentProvider) //加載ContentProvider資源
  • raw(String rawPath) //加載raw資源
  • asserts(String assertspath) //加載asserts資源
  • thumbnail(float thumbnail)//縮略圖
  • rectRoundCorner(int rectRoundRadiusf) //形狀為圓角矩形時的圓角半徑
  • priority(int priority) //優先級
  • error(int errorResId) //錯誤占位圖
  • asSquare() //形狀為正方形
  • colorFilter(int color) //顏色濾鏡
  • diskCacheStrategy(DiskCacheStrategy diskCacheStrategy) //DiskCacheStrategy.NONE :不緩存圖片 /DiskCacheStrategy.SOURCE :緩存圖片源文件/DiskCacheStrategy.RESULT:緩存修改過的圖片/DiskCacheStrategy.ALL:緩存所有的圖片,默認 
    ignoreCertificateVerify(boolean ignoreCertificateVerify) // https是否忽略校驗
  • asCircle()//加載圓形圖片
  • placeHolder(int placeHolderResId) //占位圖
  • override(int oWidth, int oHeight) //加載圖片時設置分辨率 a
  • scale(int scaleMode) // CENTER_CROP等比例縮放圖片,直到圖片的狂高都大於等於ImageView的寬度,然后截取中間的顯示 ; FIT_CENTER 等比例縮放圖片,寬或者是高等於ImageView的寬或者是高 默認:FIT_CENTER
  • animate(int animationId ) 引入動畫
  • animate( Animation animation) 引入動畫
  • animate(ViewPropertyAnimation.Animator animato) 引入動畫
  • asBitmap(BitmapListener bitmapListener)// 使用bitmap不顯示到imageview
  • into(View targetView) //展示到imageview
  • colorFilter(int filteColor) //顏色濾鏡
  • blur(int blurRadius) //高斯模糊
  • brightnessFilter(float level) //調節圖片亮度
  • grayscaleFilter() //黑白效果
  • swirlFilter() //漩渦效果
  • toonFilter() //油畫效果
  • sepiaFilter() //水墨畫效果
  • contrastFilter(float constrasrLevel) //銳化效果
  • invertFilter() //膠片效果
  • pixelationFilter(float pixelationLevel) //馬賽克效果
  • sketchFilter() // //素描效果
  • vignetteFilter() //暈映效果

github項目地址

中轉站–GlobalConfig

GlobalConfig類非常簡單主要是選擇Loader的操作,之所以用到這個類是因為方便以后擴展。今后我們如果需要使用其他的圖片加載框架,只需要繼承ILoader,然后在GlobalConfig中配置即可。

public class GlobalConfig { public static void init(Context context, int cacheSizeInM, getLoader().init(context, cacheSizeInM, memoryCategory, isInternalCD); } public static ILoader getLoader() { if (loader == null) { //這里只做了glide的封裝 loader = new GlideLoader(); } //可以接着做fresco或者picasso return loader; } {

最終的執行者–GlideLoader

GlideLoader實現ILoader接口。在使用的時候我們雖然不用關心這個類,但是了解一下主要做了什么功能還是必要的。 
GlideLoader中主要做了兩件事,一個是初始化的實現,一個是出口方法的實現。

初始化的實現

我們在application中調用

 ImageLoader.init(getApplicationContext());

會最終調用到下面這個方法,最終的操作都是在這里進行的

public class GlideLoader implements ILoader { /** * @param context 上下文 * @param cacheSizeInM Glide默認磁盤緩存最大容量250MB * @param memoryCategory 調整內存緩存的大小 LOW(0.5f) / NORMAL(1f) / HIGH(1.5f); * @param isInternalCD true 磁盤緩存到應用的內部目錄 / false 磁盤緩存到外部存 */ @Override public void init(Context context, int cacheSizeInM, MemoryCategory memoryCategory, boolean isInternalCD) { Glide.get(context).setMemoryCategory(memoryCategory); //如果在應用當中想要調整內存緩存的大小,開發者可以通過如下方式: GlideBuilder builder = new GlideBuilder(context); if (isInternalCD) { builder.setDiskCache(new InternalCacheDiskCacheFactory(context, cacheSizeInM * 1024 * 1024)); } else { builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, cacheSizeInM * 1024 * 1024)); } } }

混淆

在proguard-rules中添加如下

-dontwarn okio.**

由於具體使用文章較長,具體如何使用詳細API介紹請移步本人下一篇博客 
Glide二次封裝庫的使用

http://blog.csdn.net/github_33304260/article/details/71077965

更多代碼可以查詢本人GitHub:歡迎閱讀,star點起來。 
Glide二次封裝庫源碼


免責聲明!

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



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