最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android圖片緩存之初識Glide(三)

 更新時間:2016年08月02日 11:18:03   作者:總李寫代碼  
這篇文章主要為大家詳細介紹了Android圖片緩存之Glide,學習比較優(yōu)秀的圖片緩存開源框架,感興趣的小伙伴們可以參考一下

前言:

前面總結(jié)學習了圖片的使用以及Lru算法,今天來學習一下比較優(yōu)秀的圖片緩存開源框架。技術(shù)本身就要不斷的更迭,從最初的自己使用SoftReference實現(xiàn)自己的圖片緩存,到后來做電商項目自己的實現(xiàn)方案不能滿足項目的需求改用Afinal,由于Afinal不再維護而選擇了師出同門的Xutils,中間也接觸過別的開源框架比如Picasso,對Picasso的第一次印象就不太好,初次接觸是拿到了公司剛從外包公司接手過來的圖片社交類app,對內(nèi)存占用太大,直接感受就是導致ListView滑動有那么一點卡頓,老牌的圖片緩存框架universalImageLoader聽說過一直沒有真正使用過,之前項目都很小,差不多幾百萬級別的app,一直使用的都是Xutils,最近覺得項目大起來了,萬一Xutils不維護了或者說要求支持的圖片格式多起來的時候,可能Xutils就不是最佳選擇了,這也是來學習Gilde的根本動機吧。其實本來想著去學習Facebook的Fresco圖片框架,但是簡單的看了一下,需要連同自定義控件一起使用,功能雖然強大,但是對于已經(jīng)在維護的項目修改成本那可不是一般的高,以后有興趣在學習吧! 

Glide簡介:

Glide 是 Google 員工的開源項目, Google I/O 上被推薦使用,一個高效、開源、Android設(shè)備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協(xié)議發(fā)布。Glide具有獲取、解碼和展示視頻劇照、圖片、動畫等功能,它還有靈活的API,這些API使開發(fā)者能夠?qū)lide應(yīng)用在幾乎任何網(wǎng)絡(luò)協(xié)議棧里。創(chuàng)建Glide的主要目的有兩個,一個是實現(xiàn)平滑的圖片列表滾動效果,另一個是支持遠程圖片的獲取、大小調(diào)整和展示。
 gitHub地址:https://github.com/bumptech/glide 

Glide特點
 •使用簡單
 •可配置度高,自適應(yīng)程度高
 •支持常見圖片格式 Jpg png gif webp
 •支持多種數(shù)據(jù)源  網(wǎng)絡(luò)、本地、資源、Assets 等
 •高效緩存策略    支持Memory和Disk圖片緩存 默認Bitmap格式采用RGB_565內(nèi)存使用至少減少一半
 •生命周期集成   根據(jù)Activity/Fragment生命周期自動管理請求
 •高效處理Bitmap  使用Bitmap Pool使Bitmap復用,主動調(diào)用recycle回收需要回收的Bitmap,減小系統(tǒng)回收壓力 

Glide簡單使用
 1.)添加引用 build.gradle 中添加配置
 compile 'com.github.bumptech.glide:glide:3.7.0'
2.)設(shè)置綁定生命周期 
我們可以更加高效的使用Glide提供的方式進行綁定,這樣可以更好的讓加載圖片的請求的生命周期動態(tài)管理起來 

 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.)設(shè)置加載中以及加載失敗圖片 
api里面對placeholder()、error()函數(shù)中有多態(tài)實現(xiàn) 用的時候可以具體的熟悉一下

復制代碼 代碼如下:
Glide.with(this).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);

5.)設(shè)置跳過內(nèi)存緩存 
 Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);
6.)設(shè)置下載優(yōu)先級 
Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);
7.)設(shè)置緩存策略 
Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
策略解說: 
all:緩存源資源和轉(zhuǎn)換后的資源 
none:不作任何磁盤緩存 
source:緩存源資源 
result:緩存轉(zhuǎn)換后的資源 
8.)設(shè)置加載動畫 
api也提供了幾個常用的動畫:比如crossFade() 
  Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView); R.anim.item_alpha_in

<?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.)設(shè)置縮略圖支持 
這樣會先加載縮略圖 然后在加載全圖 
 Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);
10.)設(shè)置加載尺寸 
 Glide.with(this).load(imageUrl).override(800, 800).into(imageView);
11.)設(shè)置動態(tài)轉(zhuǎn)換 
 Glide.with(this).load(imageUrl).centerCrop().into(imageView); 

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

 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.)設(shè)置要加載的內(nèi)容 
項目中有很多需要先下載圖片然后再做一些合成的功能,比如項目中出現(xiàn)的圖文混排,該如何實現(xiàn)目標下 

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

13 .)設(shè)置監(jiān)聽請求接口 

 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);

設(shè)置監(jiān)聽的用處 可以用于監(jiān)控請求發(fā)生錯誤來源,以及圖片來源 是內(nèi)存還是磁盤 

14.)設(shè)置動態(tài)GIF加載方式  

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

 15.)緩存的動態(tài)清理  

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

以上是Glide的常規(guī)用法,基本上滿足開發(fā)需要了,然后再去學習一下其他相關(guān)知識。

相關(guān)文章

  • Android獲取當前應(yīng)用分配的最大內(nèi)存和目前使用內(nèi)存的方法

    Android獲取當前應(yīng)用分配的最大內(nèi)存和目前使用內(nèi)存的方法

    今天小編就為大家分享一篇關(guān)于Android獲取當前應(yīng)用分配的最大內(nèi)存和目前使用內(nèi)存的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Android標題欄中添加返回按鈕功能

    Android標題欄中添加返回按鈕功能

    標題欄中的返回按鈕在實際使用中用的比較多,今天就來講講我在項目開發(fā)中的使用經(jīng)歷,需要的朋友參考下吧
    2017-04-04
  • Android EditText被軟鍵盤遮蓋的處理方法

    Android EditText被軟鍵盤遮蓋的處理方法

    android app新增了透明欄效果,結(jié)果發(fā)現(xiàn)鍵盤彈起后會遮蓋屏幕底部的EditText,沒有像想象中的調(diào)整窗口大小,并滾動ScrollView,將EditText顯示在鍵盤上方。下面小編把解決方法記錄一下,特此分享到腳本之家平臺,感興趣的朋友一起看看吧
    2016-10-10
  • android 彈出提示框的使用(圖文實例)

    android 彈出提示框的使用(圖文實例)

    android 彈出提示框的使用(圖文實例),需要的朋友可以參考一下
    2013-06-06
  • Android PopUpWindow使用詳解

    Android PopUpWindow使用詳解

    PopupWindow與AlertDialog最關(guān)鍵的區(qū)別是AlertDialog不能指定顯示位置,只能默認顯示在屏幕最中間(當然也可以通過設(shè)置WindowManager參數(shù)來改變位置)。而PopupWindow是可以指定顯示位置的,隨便哪個位置都可以,更加靈活
    2021-10-10
  • Flow如何解決背壓問題的方法詳解

    Flow如何解決背壓問題的方法詳解

    這篇文章主要為大家介紹了Flow如何解決背壓問題的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Android仿QQ空間主頁面的實現(xiàn)

    Android仿QQ空間主頁面的實現(xiàn)

    今天模仿安卓QQ空間,打開程序的啟動畫面和導航頁面我就不做了,大家可以模仿微信的那個做一下,很簡單。這次主要做一下主頁面的實現(xiàn),感興趣的朋友可以參考下
    2013-01-01
  • Android自定義View實現(xiàn)字母導航欄

    Android自定義View實現(xiàn)字母導航欄

    通常手機通訊錄都會有索引欄,這篇文章主要介紹了Android自定義View實現(xiàn)字母導航欄,現(xiàn)在分享給大家。
    2016-10-10
  • Android實現(xiàn)一周時間早中晚排班表

    Android實現(xiàn)一周時間早中晚排班表

    項目需求需要實現(xiàn)一個動態(tài)添加,修改一周早中晚時間排班表,文章給大家提供了實現(xiàn)代碼,需要的朋友參考下吧
    2018-07-07
  • Android利用ContentProvider獲取本地數(shù)據(jù)的方法

    Android利用ContentProvider獲取本地數(shù)據(jù)的方法

    這篇文章主要介紹了Android利用ContentProvider獲取本地數(shù)據(jù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論

庆云县| 阜新市| 当涂县| 绥棱县| 奉化市| 怀远县| 静乐县| 辽阳市| 隆林| 闸北区| 屯留县| 馆陶县| 连南| 久治县| 清涧县| 天峻县| 新野县| 广灵县| 梓潼县| 郴州市| 周口市| 佛山市| 泰来县| 西和县| 阳山县| 永和县| 达州市| 镇江市| 景洪市| 邵东县| 昭苏县| 宜昌市| 卓尼县| 阳高县| 博爱县| 昌都县| 中西区| 彭山县| 股票| 舞阳县| 百色市|