Glide使用總結

首先,添加依賴

implementation 'com.github.bumptech.glide:glide:4.5.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'

之后添加訪問網絡權限

<uses-permission android:name="android.permission.INTERNET" />

一、常用的方法

1、加載圖片到imageView

Glide.with(Context context).load(Strint url).into(ImageView imageView);

2、各種形式的圖片加載到ImageView

// 加載本地圖片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);// 加載應用資源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);// 加載二進制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);// 加載Uri對象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);

3、加載帶有占位圖

Glide.with(this).load(url).placeholder(R.drawable.loading).into(imageView);

占位圖目的為在目的圖片還未加載出來的時候,提前展示給用戶的一張圖片;
4、加載失敗 放置占位符

Glide.with(this).load(url).placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE)//關閉Glide的硬盤緩存機制.into(imageView);//DiskCacheStrategy.NONE: 表示不緩存任何內容。
//DiskCacheStrategy.SOURCE: 表示只緩存原始圖片。
//DiskCacheStrategy.RESULT: 表示只緩存轉換過后的圖片(默認選項)。
//DiskCacheStrategy.ALL : 表示既緩存原始圖片,也緩存轉換過后的圖片。

5、加載指定格式的圖片--指定為靜止圖片

Glide.with(this).load(url).asBitmap()//只加載靜態圖片,如果是git圖片則只加載第一幀。.placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);

6、加載動態圖片

Glide.with(this).load(url).asGif()//加載動態圖片,若現有圖片為非gif圖片,則直接加載錯誤占位圖。.placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);

7、加載指定大小的圖片

Glide.with(this).load(url).placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE).override(100, 100)//指定圖片大小.into(imageView);

8、關閉框架的內存緩存機制

Glide.with(this).load(url).skipMemoryCache(true)  //傳入參數為false時,則關閉內存緩存。.into(imageView);

9、關閉硬盤的緩存

Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.NONE)     //關閉硬盤緩存操作.into(imageView);//其他參數表示:
//DiskCacheStrategy.NONE: 表示不緩存任何內容。
//DiskCacheStrategy.SOURCE: 表示只緩存原始圖片。
//DiskCacheStrategy.RESULT: 表示只緩存轉換過后的圖片(默認選項)。
//DiskCacheStrategy.ALL : 表示既緩存原始圖片,也緩存轉換過后的圖片。

10、當引用的 url 存在 token 時解決方法-->重寫 Glide 的 GlideUrl 方法

public class MyGlideUrl extends GlideUrl {private String mUrl;public MyGlideUrl(String url) {super(url);mUrl = url;}@Overridepublic String getCacheKey() {return mUrl.replace(findTokenParam(), "");}private String findTokenParam() {String tokenParam = "";int tokenKeyIndex = mUrl.indexOf("?token=") >= 0 ? mUrl.indexOf("?token=") : mUrl.indexOf("&token=");if (tokenKeyIndex != -1) {int nextAndIndex = mUrl.indexOf("&", tokenKeyIndex + 1);if (nextAndIndex != -1) {tokenParam = mUrl.substring(tokenKeyIndex + 1, nextAndIndex + 1);} else {tokenParam = mUrl.substring(tokenKeyIndex);}}return tokenParam;}}

然后加載圖片的方式為:

Glide.with(this).load(new MyGlideUrl(url)).into(imageView);

11、利用Glide將圖片加載到不同控件或加載成不同使用方式
(1)、拿到圖片實例

//1、通過自己構造 target 可以獲取到圖片實例
SimpleTarget<GlideDrawable> simpleTarget = new SimpleTarget<GlideDrawable>() {@Overridepublic void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) {imageView.setImageDrawable(resource);}
};//2、將圖片實例記載到指定的imageview上,也可以做其他的事情
public void loadImage(View view) {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";Glide.with(this).load(url).into(simpleTarget);
}

(2)、將圖片加載到任何位置

/*
*將圖片加載為控件背景
*/
public class MyLayout extends LinearLayout {private ViewTarget<MyLayout, GlideDrawable> viewTarget;public MyLayout(Context context, AttributeSet attrs) {super(context, attrs);viewTarget = new ViewTarget<MyLayout, GlideDrawable>(this) {@Overridepublic void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) {MyLayout myLayout = getView();myLayout.setImageAsBackground(resource);}};}public ViewTarget<MyLayout, GlideDrawable> getTarget() {return viewTarget;}public void setImageAsBackground(GlideDrawable resource) {setBackground(resource);}}//引用圖片到指定控件作為背景
public class MainActivity extends AppCompatActivity {MyLayout myLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myLayout = (MyLayout) findViewById(R.id.background);}public void loadImage(View view) {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";Glide.with(this).load(url).into(myLayout.getTarget());}}

12、Glide 實現預加載

//a、預加載代碼
Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).preload();//preload() 有兩種重載// 1、帶有參數的重載,參數作用是設置預加載的圖片大小;
//2、不帶參數的表示加載的圖片為原始尺寸;//b、使用預加載的圖片
Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);

切記:diskCacheStrategy() 方法內必須設置參數為:“ DiskCacheStrategy.SOURCE ”,否則可能預加載失敗,導致顯示圖片時,需要重新加載。

13、Glide 實現圖片下載
使用 downloadOnly(int width, int height)downloadOnly(Y target) 方法替代 into(view) 方法。

public void downloadImage(View view) {new Thread(new Runnable() {@Overridepublic void run() {try {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";final Context context = getApplicationContext();FutureTarget<File> target = Glide.with(context).load(url).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);final File imageFile = target.get();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(context, imageFile.getPath(), Toast.LENGTH_LONG).show();}});} catch (Exception e) {e.printStackTrace();}}}).start();
}

(1)、有兩個參數的 downloadOnly(int width, int height) 方法表示指定下載尺寸,用于在子線程內進行下載;
(2)、一個參數的 downloadOnly(Y target) 方法 在主線程內進行下載
(3)、target.get() 方法可以獲取到下載文件保存路徑;

使用下載完的圖片的方式

public void loadImage(View view) {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);
}

注意: diskCacheStrategy() 方法的參數應該為 DiskCacheStrategy.SOURCE 或者 DiskCacheStrategy.ALL否則可能導致加載圖片到控件的時候,需要重新加載。

13、監聽 Glide 加載的狀態

public void loadImage(View view) {String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";Glide.with(this).load(url).listener(new RequestListener<String, GlideDrawable>() {@Overridepublic boolean onException(Exception e, String model, Target<GlideDrawable> target,boolean isFirstResource) {return false;}@Overridepublic boolean onResourceReady(GlideDrawable resource, String model,Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {return false;}}).into(imageView);
}

(1)、onException() 方法表示加載失敗,onResourceReady() 表示加載成功;
(2)、 每個方法都有一個 boolean 的返回值,false表示未處理、true 表示處理。

14、Glide 的圖形變換功能
(1)、禁用圖形變換功能

Glide.with(this).load(url).dontTransform().into(imageView);

這個方法時全局的,導致其他地方的圖片也不可進行圖形變換了。

修改方法

Glide.with(this).load(url).override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).into(imageView);

通過 override() 方法設置大小

(2)、簡單的圖形變換

Glide.with(this).load(url).centerCrop().into(imageView);Glide.with(this).load(url).fitCenter().into(imageView);

通過 centerCrop()方法 按照原始的長寬比充滿全屏和 fitCenter() 方法 對原圖的中心區域進行裁剪對圖片進行相關設置。

(3)、override() 方法與 centerCrop() 方法配合使用

String url = "http://cn.bing.com/az/hprichbg/rb/AvalancheCreek_ROW11173354624_1920x1080.jpg";
Glide.with(this).load(url).override(500, 500).centerCrop().into(imageView);

img_0a23408d48dd32475701fef48dbca907.png
樣圖

(4)、復雜的圖像變換
首先需要再引入一個 第三方框架 。

dependencies {implementation 'jp.wasabeef:glide-transformations:3.3.0'// If you want to use the GPU Filtersimplementation 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
}

其次,部分樣例:
圖片虛化

Glide.with(this).load(url).bitmapTransform(new BlurTransformation(this)).into(imageView);

圖片黑白化

Glide.with(this).load(url).bitmapTransform(new GrayscaleTransformation(this)).into(imageView);

多個屬性同時使用

Glide.with(this).load(url).bitmapTransform(new BlurTransformation(this), new GrayscaleTransformation(this)).into(imageView);

還有更多的好玩的屬性,請到框架官網查看:https://github.com/wasabeef/glide-transformations

15、探究Glide的自定義模塊功能
請查看 郭神 的文章 《Android圖片加載框架最全解析(六),探究Glide的自定義模塊功能》 。

16、帶進度的Glide圖片加載功能
請查看 郭神 的文章Android圖片加載框架最全解析(七),實現帶進度的Glide圖片加載功能 。

17、Glide 4用法
請查看 郭神 的文章Android圖片加載框架最全解析(八),帶你全面了解Glide 4的用法 。

注意: 本文的大量方法摘抄在郭神的博客,若想更加全面的了解Glide請查看郭神的博客:

郭神的 《Glide最全解析》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254185.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

流行的音頻編碼標準

speech codec (G.711, G.723, G.726, G.729, iLBC) 各種各樣的編解碼在各種領域得到廣泛的應用&#xff0c;下面就把各種codec的壓縮率進行一下比較&#xff0c;不正確之處望各位同行指正。 Speech codec&#xff1a; 現主要有的speech codec 有: G.711, G.723, G.726 , G…

【angularjs】使用angular搭建項目,pc端實現網頁中的內容不可復制

實現目標&#xff1a;不可復制頁面內容 js:          <script language"javascript"> if (typeof(document.onselectstart) ! "undefined") { // IE下禁止元素被選取 document.onselectstart function (event){if(event.targe…

DIV+CSS如何讓文字垂直居中?

在說到這個問題的時候&#xff0c;也許有人會問CSS中不是有vertical-align屬性來設置垂直居中的嗎&#xff1f;即使是某些瀏覽器不支持我只需做少許的CSS Hack技術就可以啊&#xff01;所以在這里我還要啰嗦兩句&#xff0c;CSS中的確是有vertical-align屬性&#xff0c;但是它…

Segments POJ 3304 直線與線段是否相交

題目大意&#xff1a;給出n條線段&#xff0c;問是否存在一條直線&#xff0c;使得n條線段在直線上的投影有至少一個公共點。 題目思路:如果假設成立&#xff0c;那么作該直線的垂線l&#xff0c;該垂線l與所有線段相交&#xff0c;且交點可為線段中的某兩個交點 證明&#xff…

Linux Socket編程(不限Linux)

“一切皆Socket&#xff01;” 話雖些許夸張&#xff0c;但是事實也是&#xff0c;現在的網絡編程幾乎都是用的socket。 ——有感于實際編程和開源項目研究。 我們深諳信息交流的價值&#xff0c;那網絡中進程之間如何通信&#xff0c;如我們每天打開瀏覽器瀏覽網頁時&#xff…

shell之計算文本中單詞出現頻率

2019獨角獸企業重金招聘Python工程師標準>>> Word Frequency&#xff08;https://leetcode.com/problems/word-frequency/description/&#xff09; Example: Assume that words.txt has the following content: the day is sunny the the the sunny is is Your scr…

一個halcon擬合直線的例子

read_image (hImage, E:/vs2012/halcon卡尺例程/白光碗光效果4.bmp) get_image_pointer1(hImage, Pointer, Type, Width, Height) *功能&#xff1a;獲取一個通道的指針&#xff0c;得到HTuple Pointer, Type, CurWidth, CurHeight dev_set_draw(margin) dev_set_color (green…

NLP數據挖掘基礎知識

Basis(基礎)&#xff1a; SSE(Sum of Squared Error, 平方誤差和)SAE(Sum of Absolute Error, 絕對誤差和)SRE(Sum of Relative Error, 相對誤差和)MSE(Mean Squared Error, 均方誤差)RMSE(Root Mean Squared Error, 均方根誤差)RRSE(Root Relative Squared Error, 相對平方根誤…

SQL Fundamentals || Oracle SQL語言

對于SQL語言&#xff0c;有兩個組成部分&#xff1a; DML&#xff08;data manipulation language&#xff09; 它們是SELECT、UPDATE、INSERT、DELETE&#xff0c;就象它的名字一樣&#xff0c;這4條命令是用來對數據庫里的數據進行操作的語言。 DDL&#xff08;data defini…

圓形卡尺測量后創建模板

read_image (Image, QQ圖片20201113111404.jpg) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image) rgb1_to_gray (Image,Image) ****創建模板階段 *大致找內圓 fast_threshold (Image, Region, 128, 255, 20) connecti…

fread函數和fwrite函數,read,write

fread函數和fwrite函數 1.函數功能 用來讀寫一個數據塊。 2.一般調用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 3.說明 &#xff08;1&#xff09;buffer&#xff1a;是一個指針&#xff0c;對fread來說&#xff0c;它是讀入數據的存放地址。對fwrit…

微信小程序 CSS filter(濾鏡)的使用示例

前言 之前在看七月老師的視頻的時候&#xff0c;看到了有一個樣式是-webkit-filter&#xff0c;不知道是什么&#xff08;我沒咋學過CSS&#xff0c;嘿嘿&#xff0c;所以不知道是啥&#xff09;&#xff0c;于是查了一下&#xff0c;原來是濾鏡吖。但是在微信小程序里使用的時…

vmware ubuntu重置root密碼

1.重啟ubuntu&#xff0c;按住shift&#xff08;開機啟動時&#xff09; 2.選擇recovery mode,enter 3.root選擇root drop to root shell prompt 4.進入shell界面設置密碼 (1)mount -rw -o remount / (2)passwd username(設置root用戶的密碼) 完成以上修改后&#xff0c;重啟就…

halcon使用直線標定板,標定相機內參代碼

read_image (Image, 直線標定板圖片/Left201118140641772.bmp) get_image_size (Image, Width, Height) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image) * Image Acquisition 01: Code generated by Image Acquisiti…

dyld: Library not loaded: @rpath/libswiftCore.dylib 解決方法

解決&#xff1a; 設置Build Setting - > 搜索 embe關鍵字 -> 修改屬性 見如下圖&#xff1a; 如果更新了Xcode 8 這里變成&#xff1a; 轉載于:https://www.cnblogs.com/yajunLi/p/5979621.html

Bootloader及u-boot簡介/u-boot系統啟動流程

Bootloader及u-boot簡介Bootloader代碼是芯片復位后進入操作系統之前執行的一段代碼&#xff0c;主要用于完成由硬件啟動到操作系統啟動的過渡&#xff0c;從而為操作系統提供基本的運行環境&#xff0c;如初始化CPU、堆棧、存儲器系統等。Bootloader 代碼與CPU 芯片的內核結構…

Dubbo之RPC架構

為什么會有dubbo的出現: 隨著互聯網的發展&#xff0c;網站應用的規模不斷擴大&#xff0c;常規的垂直應用架構已無法應對&#xff0c;分布式服務架構以及流動計算架構勢在必行&#xff0c;亟需一個治理系統確保架構有條不紊的演進。 單一應用架構 當網站流量很小時&#xff0c…

區域路由的注冊機制

AreaRegistration.RegisterAllAreas() 我們新建一個名稱為Admin的Area&#xff0c;VS生成下面的代碼。 { action , id 我們先來看AreaRegistration這個抽象類&#xff0c;實際上&#xff0c;它只有一個核心功能&#xff0c;就是RegisterAllAreas&#xff0c;獲取所有繼承它的…

Unix/Linux IPC及線程間通信總結

一、互斥與同步 1.互斥&#xff1a;是指某一資源同時只允許一個訪問者對其進行訪問&#xff0c;具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序&#xff0c;即訪問是無序的。 2.同步&#xff1a;是指在互斥的基礎上&#xff08;大多數情況&#xff09;&#xff0…