1. 程式人生 > >Glide(圖片非同步載入快取庫)的方法介紹

Glide(圖片非同步載入快取庫)的方法介紹

文章來源:http://blog.csdn.net/u011733020/article/details/52319283 

Glide 在開源中國上的介紹


Glide : An image loading and caching library for Android focused on smooth scrolling
安卓上專注於平滑滑動的圖片載入和快取庫。 Glide有以下特點: 1.注重 list中的圖片在scroll狀態下的流暢性。 2.可以展示視訊影象,普通格式圖片和GIF格式。
3.預設網路請求使用的是httpurlconnection,同時支援自定義使用volley 或者 ok。 4.自定義多個請求的優先順序,重要的圖片,可以設定高的優先順序,優先載入。 5.可以給url 設定一個簽名,當url 指向不變,圖片內容變化時,根據簽名不同,去自動更換以快取的圖片,這一點是imagoader無法做到的。 6.更有一個非常優秀的特點,可以在非ImageView 型別上面載入圖片。 7.Glide 對記憶體的使用非常優秀,並且Glide生命週期與Activity生命週期繫結,更好的分配回收記憶體。 。。。 更多優點,不一一總結,留待大家親身使用感受。

獲取Glide

首先獲取Glide的jar包,可以去github下載,新增依賴,也可以使用gradle 下載。

You can download a jar from GitHub's releases page.

Or use Gradle:

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

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

How do I use Glide?

// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
  ...
  ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

  Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
}

// For a simple image list:
@Override public View getView(int position, View recycled, ViewGroup container) {
  final ImageView myImageView;
  if (recycled == null) {
    myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);
  } else {
    myImageView = (ImageView) recycled;
  }

  String url = myUrls.get(position);

  Glide
    .with(myFragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_spinner)
    .crossFade()
    .into(myImageView);

  return myImageView;
}
可以看出Glide 的使用時相當簡便的,新增依賴後,僅僅通過Glide.with().load().into();就可以展示遠端圖片。 以上便是Github上關於Glide的基本介紹,接下來我們看具體的使用。

Glide 使用起來非常簡單,Glide 在Activity 、Fragment 中都可以使用,並且是通過繫結對應的物件去使用。

[java] view plain copy  print?
  1. Glide.with(this).load(url).into(imageView);  
這就是最基本的使用方式 。
with() :使Glide 的生命週期與當前物件繫結,可以是Activity Fragment Context等等。 load():可以載入一個本地圖片,或者網路圖片地址,也可以是Android工程的 內部Resource 圖片資源。 into():將展示在ImageView 物件。 介紹一些常用的配置: Glide基本方法:Glide.with(this).load(R.mipmap.bigger).into(imageView);
載入網路圖片時顯示的佔位圖:.placeholder(holderId).into(imageView); 載入失敗時展示的失敗圖:.error(errorId).into(imageView);
淡入淡出的漸變展示過渡動畫:.crossFade().into(imageView);淡入淡出的漸變展示過渡動畫 crossFade(int millSeconds) 預設Glide是自動執行該方法的,淡入時間是300ms (可以自己傳int 引數去調整時間),如果要禁止該效果,可以呼叫dontAnimate() 方法
按比例縮小或者放大到ImageView寬度,居中顯示:.fitCenter().into(imageView); 按比例放大圖片居中顯示,圖片的長/寬 可能大於ImageView的長/寬:.centerCrop().into(imageView); priority( Priority.HIGH ):設定請求的優先順序 由低到高分別為: Priority.LOW、  Priority.NORMAL、  Priority.HIGH   、 Priority.IMMEDIATE。
skipMemoryCache( true ) :是否設定不允許記憶體快取,如果是比較頻繁的變化,那麼可以不在記憶體中儲存,預設是false,即允許記憶體快取。
diskCacheStrategy():設定磁碟快取策略,因為預設情況下 Glide 不僅僅會快取遠端圖片,並且會快取適應當前View size的圖片。 引數為列舉型別 有四種分辨是: DiskCacheStrategy.NONE 什麼都不快取。
DiskCacheStrategy.SOURCE 僅僅只快取原來的全解析度的影象。
DiskCacheStrategy.RESULT 僅僅快取最終的影象,即,降低解析度後的(或者是轉換後的)。
DiskCacheStrategy.ALL 快取所有版本的影象(預設行為)。
override(int w,int h): 重新調整圖片的大小。Glide 載入圖片預設是適應ImageView的大小,呼叫該方法,可能導致圖片顯示小於ImageView的size。 縮圖:普通方式 .thumbnail(0.1f) 將原圖縮小到10%。使用該方法需要保證ImageView的ScaleType。 高階方式通過請求一個額外的Request去請求縮圖 [java] view plain copy  print?
  1. privatevoid loadImageThumbnailRequest() {    
  2.     // setup Glide request without the into() method
  3.     DrawableRequestBuilder<String> thumbnailRequest = Glide  
  4.         .with( context )  
  5.         .load( thumbnailUrl );  
  6.     // pass the request as a a parameter to the thumbnail request
  7.     Glide  
  8.         .with( context )  
  9.         .load( UsageExampleGifAndVideos.gifUrl )  
  10.         .thumbnail( thumbnailRequest )  
  11.         .into( imageView);  
  12. }  

將圖片顯示在普通View上: [java] view plain copy  print?
  1. public <T> void showImageOnCustomView(T t, String url, View view) {  
  2.     ViewTarget viewTarget = new ViewTarget<View, GlideDrawable>(view) {  
  3.         @Override
  4.         publicvoid onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {  
  5.             //>=API 16 this.view.setBackground(resource.getCurrent());
  6.             this.view.setBackgroundDrawable(resource.getCurrent());  
  7.         }  
  8.     };  
  9.     Glide.with(context).load(url).into(viewTarget);  
  10. }  

屬性動畫animate(): 給圖片新增動畫,比如屬性動畫 translate、scale、alpha、rotate,又或者 Activity切換樣式 這種屬性動畫 android.R.anim.slide_in_left [java] view plain copy  print?
  1. Glide    
  2.     .with( context )  
  3.     .load( url )  
  4.     .animate( android.R.anim.slide_in_left ) // or R.anim.zoom_in
  5.     .into( imageView1 );  
也可以自定義xml Animation。
或者: [java] view plain copy  print?
  1. ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {    
  2.     @Override
  3.     publicvoid animate(View view) {  
  4.         // if it's a custom view class, cast it here
  5.         // then find subviews and do the animations
  6.         // here, we just use the entire view for the fade animation
  7.         view.setAlpha( 0f );  
  8.         ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );  
  9.         fadeAnim.setDuration( 2500 );  
  10.         fadeAnim.start();  
  11.     }  
  12. };  
  13. Glide    
  14.     .with( context )  
  15.     .load( url )  
  16.     .animate( animationObject )  
  17.     .into( imageView );  
   圖片進行轉換transform() /bitmapTransform(): 比如模糊,圓形圖片 and so on。 [java] view plain copy  print?
  1. publicclass BlurTransformation extends BitmapTransformation {  
  2.     private RenderScript rs;  
  3.     public BlurTransformation(Context context) {  
  4.         super( context );  
  5.         rs = RenderScript.create( context );  
  6.     }  
  7.     @Override
  8.     protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {  
  9.         Bitmap blurredBitmap = toTransform.copy( Bitmap.Config.ARGB_8888, true );  
  10.         // Allocate memory for Renderscript to work with
  11.         Allocation input = Allocation.createFromBitmap(  
  12.             rs,   
  13.             blurredBitmap,   
  14.             Allocation.MipmapControl.MIPMAP_FULL,   
  15.             Allocation.USAGE_SHARED  
  16.         );  
  17.         Allocation output = Allocation.createTyped(rs, input.getType());  
  18.         // Load up an instance of the specific script that we want to use.
  19.         ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));  
  20.         script.setInput(input);  
  21.         // Set the blur radius
  22.         script.setRadius(10);  
  23.         

    相關推薦

    Glide圖片非同步載入快取方法介紹

    文章來源:http://blog.csdn.net/u011733020/article/details/52319283  Glide 在開源中國上的介紹 Glide 的詳細介紹:請點這裡Glide 的下載地址:請點這裡 Glide :

    Android-Universal-Image-Loader 圖片非同步載入的使用超詳細配置

          這個圖片非同步載入並快取的類已經被很多開發者所使用,是最常用的幾個開源庫之一,主流的應用,隨便反編譯幾個火的專案,都可以見到它的身影。        可是有的人並不知道如何去使用這庫如何進行配置,網上查到的資訊對於剛接觸的人來說可能太少了,下面我就把我使用過程中

    Universal-Image-Loader圖片非同步載入

    這是 一個開源的Android關於下載顯示圖片的工具類,在這個下載包裡面jar檔案,用於我們匯入專案使用,具體使用方法在包裡面也含有。下面是一個例子: 雙擊程式碼複製 1 2 <uses-permissionandroid:name="android.pe

    Android經典面試問題:請你設計一套圖片非同步載入快取方案——圖片的三級快取

    友情提示:文章最後附有專案原始碼現在,Android有很多優秀的圖片載入框架。例如:Picasso,Glide,Fresco。我們幾乎只要簡單呼叫幾句程式碼就可以很好的實現圖片的載入。很多時候也不需要我們親自去寫圖片載入方案。但是,學習圖片的三級快取策略無論是在面試時,還是對

    Android-Image-Loader 圖片非同步載入的使用超(詳細配置)

           這個圖片非同步載入並快取的類已經被很多開發者所使用,是最常用的幾個開源庫之一,主流的應用,隨便反編譯幾個火的專案,都可以見到它的身影。        可是有的人並不知道如何去使用這庫如何進行配置,網上查到的資訊對於剛接觸的人來說可能太少了,下面我就把我使用

    修改圖片載入框架Glide快取路徑可用於清理快取需求

    1.寫一個類實現  GlideModule public class GlideCacheMore implements GlideModule { private String path=Environment.getExternalStorageDirector

    Android:android的框架區別網路框架、圖片非同步載入快取框架、資料框架特點整理

    在我們安卓開發中,很多繁瑣的程式碼會很頭疼,編寫程式的週期會增加,因此很多框架都冒出來了,我們在搞懂底層原理之時,我們更應該學會用一些優秀框架來解決複雜程式碼,和繁瑣的重寫程式碼。因為針對最簡單的case,我只需要提供request url,成功時的callba

    Yii2.0-圖片上傳擴充套件非同步載入縮圖 [擴充套件元件]

    資源下載: 擴充套件下載(圖片上傳擴充套件-file_upload) 適用框架:Yii2.0高階版(基礎版使用需要適當修改) 效果展示: 配置好了之後效果展示:支援非同步載入縮圖 安裝擴充套件: 1.點選上面擴充套件下載下載擴充套件 然後重新命名為

    Android開發之listview優化+圖片非同步載入+避免圖片顯示閃爍修改版

    小鹿路過此地。。心熱之下寫寫Android開發中的listview運用(閒的沒事幹,改動了一點程式碼,但實現功能不變) 小鹿學Android開發已有兩年多了,總算有一點點小收穫,雖算不上大牛大神級人物,但有些東西可以和一家一起分享一起交流一起學習一起進步...。還有,望檢視

    深入理解JS非同步程式設計五指令碼非同步載入

    非同步指令碼載入 阻塞性指令碼 JavaScript在瀏覽器中被解析和執行時具有阻塞的特性,也就是說,當JavaScript程式碼執行時,頁面的解析、渲染以及其他資源的下載都要停下來等待指令碼執行完畢 瀏覽器是按照從上到下的順序解析頁面,因此正常情況下,J

    爬蟲知識點ajax非同步載入,JavaScript 動態重新整理,phantomjs + selenium模擬登陸

    JavaScript JavaScript 是網路上最常用也是支持者最多的客戶端指令碼語言。它可以收集 使用者的跟蹤資料,不需要過載頁面直接提交表單,在頁面嵌入多媒體檔案,甚至執行網頁遊戲。 Ajax  當你訪問一個網頁時 滑鼠向下滑 資料不斷的更新而http網址沒有變

    Flash AS3.0載入外部資源圖片、MP3、SWF的兩種方式

    關於AS3載入圖片等外部自言,大部分人常用的有兩種方式:Loader 和Embed ,各自的特點,總結如下: Embed :在Flash編譯階段就將資源嵌入,也就是說圖片資源是會被編譯進swf檔案裡面去的;這樣子的好處是程式碼比較簡潔,使用方便,也不存在載入順序的問題,缺點

    Unity+NGUI打造網路圖片非同步載入與本地快取工具類(一)

    我們在移動端的開發中,非同步網路圖片載入用的非常的多,在unity當中雖然有AssetBundle的存在,一般是先載入好遊戲資源然後再進入場景,但是還有不少地方能夠用到非同步網路圖片的載入以及其快取機制。 我之前也寫過兩個版本的ios中的非同步網路圖片載入helper類,所

    cocos2d-x 菜鳥學習筆記三圖片載入與進度條

    在做遊戲時,會用於很多和圖片資源,包括角色,動畫,紋理貼圖……為了減少GPU和CPU的快取佔用以及圖片的重複利用,在遊戲開始時,都會預載入這些資源進入快取,在cocos2d-x裡用的是CCTextureCache這個類。其實,在cocos2d-x自帶的TestCpp裡有對應的例子,在裡面用的是: [c

    Java異步執行多個HTTP請求的例子需要apache http類

    ride 同步 conn done 例子 latch block org ftw 直接上代碼 package org.jivesoftware.spark.util; import java.io.IOException; import java.uti

    KendoUI關於Grid頁面刷新賦值不修改數據

    fresh 修改 png row -1 event var 技術 remove 1.Grid頁面某個字段修改賦值(不用刷新) var row = GG.data("kendoGrid").select(); var data = GG.data("kend

    MM主主數據+keepalived主備高可用集群

    數據庫 集群 mm 博客分享的第一篇技術文章; 項目主要搭建:主主數據庫高可用集群搭建。 數據庫互為主備,應用技術:MM+keepalived 使用的是虛擬機搭建的實驗向大家展示: 數據庫1:192.168.4.7 數據庫2:192.168.4.77 VIP:192.168.4.68 web1:

    Intellij Idea中Jsp頁面不能訪問靜態資源圖片、js、css

    tex 文件夾 nbsp 依然 技術分享 很多 路徑 contex mage 最近在學習Spring MVC框架。用Intellij Idea編譯器開發出現了很多因為不了解編譯器配置的問題。 這次是在main.jsp頁面中圖片標簽<img src="images/on

    vue打包後出現靜態資源|圖片,json數據找不到路徑

    CP 解決 png 路徑 分享圖片 分享 com 奇跡 public 最近在學習Vue是如何編寫項目的,在踩了許多坑後,終於要到了最後一步npm run build了,很開心的等待奇跡,然後打包後出現了找不到圖片路徑的問題。 解決辦法:1.將圖片或者json數據文件夾放到s

    java基礎 第十六章連接數據

    ID 循環 exec manage () result creat AS 新的 連接數據庫(JDBC接口) 步驟如下: 先到數據庫jar包。 1.加載驅動 Class.forName("包路徑"); 例:Class.forName("com.mysql.jd