Android 開源框架Glide應用(一)

前言介紹

谷歌在2014開發者論壇上,爲我們介紹了一個名叫Glide的圖片加載庫,這個庫被廣泛的運用在Google的開源項目中。
Glide是Android中的一個快速和高效的開源媒體管理,圖片加載框架。它封裝了媒體解碼,內存和磁盤緩存,將資源池變成一個簡單一用的界面。支持獲取解碼,顯示視頻,圖片,和Gif動畫。Glide提供了一個靈活的API,允許開發人員自定義使用任何網絡框架。默認情況下,使用一個基於HttpUrlConnection 的網絡訪問,但是同樣包含了工具庫插件支持其它的網絡訪問庫,比如Volly或者OkHttp庫。Glide的主要重點是使滾動任何形式的圖片列表儘可能的平滑而且快速,但是Glide在任何你需要獲取,調整,顯示網絡圖片時同樣的高效。

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

開始配置

1.在build.gradle中添加依賴:
compile ‘com.github.bumptech.glide:glide:3.7.0’
需要support-v4庫的支持,如果你的項目沒有support-v4庫(現在項目一般默認添加),還需要添加support-v4依賴:
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 *;
}
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule

3.集成網絡訪問框架OkHttp(可選)

Glide默認使用HttpUrlConnection進行網絡請求,爲了讓APP保持一致的網絡請求形式,可以指定Glide的網絡請求形式,我們可以選Volley或者OkHttp,這裏我們選OkHttp,還需要添加一個集成庫:
compile ‘com.github.bumptech.glide:okhttp3-integration:1.4.0@aar’
//compile ‘com.squareup.okhttp3:okhttp:3.2.0’

注意:
1. Gradle會自動將OkHttpGlideModule合併到應用的manifest文件中。
2. 如果你沒有對所有的GlideModule配置混淆規則(即沒有使用-keep public class * implements com.bumptech.glide.module.GlideModule),則需要把OkHttp的GlideModule進行防混淆配置:
-keep class com.bumptech.glide.integration.okhttp3.OkHttpGlideModule

應用

簡單使用:
ImageView imageView = (ImageView) findViewById(R.id.imageview);
Glide.with(this)
.load(R.drawable.launchimage)
.into(imageView);

Glide.with()使用
1.with(Context context):使用Application作爲上下文,Glide請求將不受Activity/Fragment生命週期控制。
2.with(Activity activity):使用Activity作爲上下文,Glide請求受到Activity生命週期控制。
3.with(FragmentActivity activity):使用FragmentActivity 作爲上下文,Glide的請求會受到FragmentActivity 生命週期控制。
4.with(android.app.Fragment fragment):Glide請求受到Fragment 生命週期控制。
5.with(Fragment fragment):同上;

以上會返回關聯上下文的RequestManager示例。

RequestManager.load()使用
Glide基本上可以load任何可以拿到的媒體資源,如:

load SD卡資源:
load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/test.jpg") 
load assets資源:
load("file:///android_asset/f003.gif") 
load raw資源:
load("Android.resource://"+getPackageName()+"/raw_1")或load("android.resource://"+getPackageName()+"/"+R.raw.raw_1) 
load drawable資源:
load(R.drawable.launchimage)
load ContentProvider資源:
load("content://media/external/images/media/139469")
load http資源:
load("http://***")
load https資源:
load("https://****") 
當然,load不限於String類型,還可以:
load(Uri uri),
load(File file),
load(Integer resourceId),
load(URL url),@Deprecated
load(byte[] model),
load(T model),
loadFromMediaStore(Uri uri)。

一個工具方法:簡單的將資源 id 轉換成 Uri。

public static final String ANDROID_RESOURCE = "android.resource://";
public static final String FOREWARD_SLASH = "/";

private static Uri resourceIdToUri(Context context, int resourceId) {
    return Uri.parse(ANDROID_RESOURCE + context.getPackageName() + 
FOREWARD_SLASH + resourceId);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章