跟著源碼學設計:Glide框架及源碼解析(五)

前言

近期研究了一下Glide的圖片加載框架,在這里和大家分享一下。由于代碼研讀有限,難免有錯誤的地方,了解的童鞋還望指正。學習小組QQ群: 193765960

本篇是Glide框架及源碼解析的第五篇,主要是總結記錄Glide的一些使用技巧(會持續更新)。如果這篇文章對大家學習Glide有幫助,還望大家多多轉載。

版權歸作者所有,如有轉發,請注明文章出處:http://www.lxweimin.com/u/d43d948bef39

相關文章:

跟著源碼學設計:Glide框架及源碼解析(一)
跟著源碼學設計:Glide框架及源碼解析(二)
跟著源碼學設計:Glide框架及源碼解析(三)
跟著源碼學設計:Glide框架及源碼解析(四)
跟著源碼學設計:Glide框架及源碼解析(五)
Glide使用詳解(一)

顯示拍照或者相冊中的照片:Uri

Glide.with(this).load(uri).into(im_car_pic);

將資源轉換成base64數據

import android.util.Base64;
......
Glide.with(this).load(datastr).asBitmap().toBytes().into(new SimpleTarget<byte[]>(320,150) {
  @Override
  public void onResourceReady(byte[] bytes, GlideAnimation<? super byte[]> arg1) {
    String base64Data = Base64.encodeToString(bytes, Base64.DEFAULT);
  }
});

Glide動態加載本地base64或者服務器URL

在設置圖片時,我們往往需要將本地圖片轉換成base64上傳服務器,服務器再將base64解析成圖片,將服務器中圖片的URL返回給移動端。
這時候要考慮異步顯示:假如本地只保存了base64數據(服務器尚未返回或者斷網狀態下),我們要求存儲的圖片資源也要能夠顯示。
基本的思路有兩種,根據實際的需求來選擇。

  • 1,將選取的圖片保存成本地的圖片(文件),數據庫中保存的是本地的路徑,根據本地路徑顯示
  • 2,數據庫中保存的就是base64數據,根據base64顯示

第一種很好實現,在此處不再記錄。
第二種方案如下:

if(!TextUtils.isEmpty(car.getCarpic())){
    //carpic存放的是否是URL資源
    if(car.getCarpic().startsWith("http")){
        Glide.with(this).load(car.getCarpic()).into(im_car_pic);
    }else{
        //當存放的是base64數據時
        Glide.with(this).load(Base64.decode(car.getCarpic(), Base64.DEFAULT)).into(im_car_pic);
    }
}

Gson 數據轉換成json字符串時,默認會對一些特殊字符進行轉義

這種情況下,如果服務器存在對Json數據的驗證就會導致服務器端進行簽名驗證不會通過。
比如圖片的base64數據,其末尾=\n處的=會被轉義為\u003d,這時候如果對數據進行簽名驗證就會失敗。
具體的字符串轉義情況大致如下:

REPLACEMENT_CHARS['"'] = "\\\"";  
REPLACEMENT_CHARS['\\'] = "\\\\";  
REPLACEMENT_CHARS['\t'] = "\\t";  
REPLACEMENT_CHARS['\b'] = "\\b";  
REPLACEMENT_CHARS['\n'] = "\\n";  
REPLACEMENT_CHARS['\r'] = "\\r";  
REPLACEMENT_CHARS['\f'] = "\\f";  
HTML_SAFE_REPLACEMENT_CHARS = REPLACEMENT_CHARS.clone();  
HTML_SAFE_REPLACEMENT_CHARS['<'] = "\\u003c";  
HTML_SAFE_REPLACEMENT_CHARS['>'] = "\\u003e";  
HTML_SAFE_REPLACEMENT_CHARS['&'] = "\\u0026";  
HTML_SAFE_REPLACEMENT_CHARS['='] = "\\u003d";  
HTML_SAFE_REPLACEMENT_CHARS['\''] = "\\u0027";

解決這個問題的方法是:

Gson gson = new GsonBuilder().disableHtmlEscaping().create();

Glide加載圖片慢?

取消默認的加載動畫

Glide.with(this).load(vcar.getCarpic()).dontAnimate().into(im_car_pic);

更多用法,持續更新中......

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,466評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,981評論 19 139
  • 前言 近期研究了一下Glide的圖片加載框架,在這里和大家分享一下。由于代碼研讀有限,難免有錯誤的地方,了解的童鞋...
    肖丹晨閱讀 532評論 0 2
  • 上次這么多贊,看來還是有朋友對古典音樂感興趣,正好周末,就說說小提琴吧。 小提琴號稱樂器之皇后,歷史上制作小提琴最...
    樂無涯閱讀 482評論 0 1
  • 斯特羅夫終于受不了選擇回去家長,回到那個善良純潔的地方。而斯特里克蘭終于展示了他的畫。之前“我”就有提到說感覺面對...
    Super_亭小亭閱讀 130評論 0 0