亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

圖片加載框架之Glide

curlyCheng / 1983人閱讀

摘要:實(shí)現(xiàn)圖片加載功能至少需要三個(gè)參數(shù)對(duì)于很多的調(diào)用都是必須的,這里就不多說(shuō)了被加載圖像的地址。大多情況下,一個(gè)字符串代表一個(gè)網(wǎng)絡(luò)圖片的。圖片最終要展示的地方。

前言

上文已經(jīng)對(duì)當(dāng)今Android主流的圖片加載庫(kù)進(jìn)行了全面介紹 & 對(duì)比

> 如果你還沒(méi)閱讀,我建議你先[移步這里進(jìn)行查看](http://www.jianshu.com/p/97994c9693f9)

今天我們來(lái)學(xué)習(xí)一下其中一個(gè)Android主流的圖片加載庫(kù)的使用 - Glide

*

目錄

*

1. 簡(jiǎn)介

介紹:Glide,是Android中一個(gè)圖片加載開(kāi)源庫(kù)

> Google的開(kāi)源項(xiàng)目

主要作用:實(shí)現(xiàn)圖片加載

2. 功能特點(diǎn) 2.1 功能列表

從上面可以看出,Glide不僅實(shí)現(xiàn)了圖片異步加載的功能,還解決了Android中加載圖片時(shí)需要解決的一些常見(jiàn)問(wèn)題

接下來(lái),我會(huì)對(duì)Glide的每個(gè)功能點(diǎn)進(jìn)行詳細(xì)的介紹

2.2 功能介紹 2.2.1 關(guān)于圖片加載

圖片的異步加載(基礎(chǔ)功能)

ImageView targetImageView = (ImageView) findViewById(R.id.ImageView);
        String Url = "http://218.192.170.132/1.jpg";

//Glide使用了流式接口的調(diào)用方式
//Glide類是核心實(shí)現(xiàn)類。
        Glide.with(context).load(Url).into(targetImageView);

//實(shí)現(xiàn)圖片加載功能至少需要三個(gè)參數(shù):
//with(Context context)
//Context對(duì)于很多Android API的調(diào)用都是必須的,這里就不多說(shuō)了

//load(String imageUrl):被加載圖像的Url地址。
//大多情況下,一個(gè)字符串代表一個(gè)網(wǎng)絡(luò)圖片的URL。

//into(ImageView targetImageView):圖片最終要展示的地方。

設(shè)置加載尺寸

Glide.with(this).load(imageUrl).override(800, 800).into(imageView);

設(shè)置加載中以及加載失敗圖片

api里面對(duì)placeholder()、error()函數(shù)中有多態(tài)實(shí)現(xiàn),用的時(shí)候可以具體的熟悉一下
Glide
.with(this)
.load(imageUrl)
.placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);

設(shè)置加載動(dòng)畫(huà)

Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);

api也提供了幾個(gè)常用的動(dòng)畫(huà):比如crossFade()
_R.anim.item_alpha_in_


  

設(shè)置要加載的內(nèi)容

項(xiàng)目中有很多需要先下載圖片然后再做一些合成的功能,比如項(xiàng)目中出現(xiàn)的圖文混排,該如何實(shí)現(xiàn)目標(biāo)下

Glide.with(this).load(imageUrl).centerCrop().into(new SimpleTarget() {
            @Override
            public void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) {
                imageView.setImageDrawable(resource);
            }
        });
2.2.2 多樣式的媒體加載
   Glide
        .with(context)
        .load(imageUrl);
        .thumbnail(0.1f);//設(shè)置縮略圖支持:先加載縮略圖 然后在加載全圖
                           //傳了一個(gè) 0.1f 作為參數(shù),Glide 將會(huì)顯示原始圖像的10%的大小。
                          //如果原始圖像有 1000x1000 像素,那么縮略圖將會(huì)有 100x100 像素。
        .asBitmap()//顯示gif靜態(tài)圖片 
        .asGif();//顯示gif動(dòng)態(tài)圖片
        .into(imageView);
2.2.3 關(guān)于緩存

設(shè)置磁盤緩存策略

Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);

// 緩存參數(shù)說(shuō)明
// DiskCacheStrategy.NONE:不緩存任何圖片,即禁用磁盤緩存
// DiskCacheStrategy.ALL :緩存原始圖片 & 轉(zhuǎn)換后的圖片(默認(rèn))
// DiskCacheStrategy.SOURCE:只緩存原始圖片(原來(lái)的全分辨率的圖像,即不緩存轉(zhuǎn)換后的圖片)
// DiskCacheStrategy.RESULT:只緩存轉(zhuǎn)換后的圖片(即最終的圖像:降低分辨率后 / 或者轉(zhuǎn)換后 ,不緩存原始圖片

設(shè)置跳過(guò)內(nèi)存緩存

Glide
.with(this)
.load(imageUrl)
.skipMemoryCache(true)
.into(imageView);
//設(shè)置跳過(guò)內(nèi)存緩存
//這意味著 Glide 將不會(huì)把這張圖片放到內(nèi)存緩存中去
//這里需要明白的是,這只是會(huì)影響內(nèi)存緩存!Glide 將會(huì)仍然利用磁盤緩存來(lái)避免重復(fù)的網(wǎng)絡(luò)請(qǐng)求。

清理緩存

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

生命周期集成
通過(guò)設(shè)置綁定生命周期,我們可以更加高效的使用Glide提供的方式進(jìn)行綁定,這樣可以更好的讓加載圖片的請(qǐng)求的生命周期動(dòng)態(tài)管理起來(lái)

.with(Context context)// 綁定Context
.with(Activity activity);// 綁定Activity
.with(FragmentActivity activity);// 綁定FragmentActivity
.with(Fragment fragment);// 綁定Fragment

注意:
1. 傳入的context類型影響到Glide加載圖片的優(yōu)化程度
2. Glide可以監(jiān)視Activity的生命周期,在Activity銷毀的時(shí)候自動(dòng)取消等待中的請(qǐng)求。但是如果你使用Application context,你就失去了這種優(yōu)化效果。

設(shè)置動(dòng)態(tài)轉(zhuǎn)換

Glide.with(this).load(imageUrl).centerCrop().into(imageView);

設(shè)置下載優(yōu)先級(jí)

Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);
3. Demo實(shí)例

沒(méi)有Demo的代碼講解不是好文章,讓我們來(lái)一步步學(xué)會(huì)使用Glide。

步驟1:在gradle添加依賴

compile "com.github.bumptech.glide:glide:3.7.0"

步驟2:添加網(wǎng)絡(luò)權(quán)限


步驟1和步驟2是Glide使用的前提,千萬(wàn)別忘了?。。?!

步驟3:在MainActivity中

ImageView targetImageView = (ImageView) findViewById(R.id.ImageView);
String Url = "[http://218.192.170.132/1.jpg](http://218.192.170.132/1.jpg)";
Glide
        .with(this)
        .load(Url)
        .into(targetImageView);

還有具體其他功能需要配置的自己按照我上面寫的進(jìn)行配置就好了~

這里再貼上Glide的Github地址:請(qǐng)點(diǎn)擊這里

4. 特點(diǎn) 4.1 優(yōu)點(diǎn)

多樣化媒體加載

Glide 不僅是一個(gè)圖片緩存,它支持 Gif、WebP、縮略圖。甚至是 Video

生命周期集成

通過(guò)設(shè)置綁定生命周期,我們可以更加高效的使用Glide提供的方式進(jìn)行綁定,這樣可以更好的讓加載圖片的請(qǐng)求的生命周期動(dòng)態(tài)管理起來(lái)

高效的緩存策略

A. 支持Memory和Disk圖片緩存
B. Picasso 只會(huì)緩存原始尺寸的圖片,而 Glide 緩存的是多種規(guī)格,也就意味著 Glide 會(huì)根據(jù)你 ImageView 的大小來(lái)緩存相應(yīng)大小的圖片尺寸

> 比如你 ImageView 大小是200_200,原圖是 400_400 ,而使用 Glide 就會(huì)緩存 200_200 規(guī)格的圖,而 Picasso 只會(huì)緩存 400_400 規(guī)格的。這個(gè)改進(jìn)就會(huì)導(dǎo)致 Glide 比 Picasso 加載的速度要快,畢竟少了每次裁剪重新渲染的過(guò)程,非常靈活 & 加載速度快

C. 內(nèi)存開(kāi)銷小
默認(rèn)的 Bitmap 格式是 RGB_565 格式,而 Picasso 默認(rèn)的是 ARGB_8888 格式,這個(gè)內(nèi)存開(kāi)銷要小一半。

> Android關(guān)于圖片內(nèi)存計(jì)算,共有四種,分別是:
> 
> 1.  ALPHA_8:每個(gè)像素占用1byte內(nèi)存
> 2.  ARGB_4444:每個(gè)像素占用2byte內(nèi)存
> 3.  ARGB_8888:每個(gè)像素占用4byte內(nèi)存(默認(rèn),色彩最細(xì)膩=顯示質(zhì)量最高=占用的內(nèi)存也最大)
> 4.  RGB_565:每個(gè)像素占用2byte內(nèi)存(8bit = 1byte)
>     舉例說(shuō)明:一個(gè)32位的PNG=ARGB_8888=1204x1024,那么占用空間是:1024x1024x(32/8) = 4,194,304kb=4M左右
>     在解析圖片的時(shí)候,為了避免oom和節(jié)省內(nèi)存,最好使用ARGB_4444模式(節(jié)省一半的內(nèi)存空間)

4.2 缺點(diǎn)

使用方法復(fù)雜

由于Glide其功能強(qiáng)大,所以使用的方法非常多,其源碼也相對(duì)的復(fù)雜

包較大

5. 相比其他圖片加載庫(kù)(Picasso & Fresco)

對(duì)比Picasso

Glide 是在Picasso 基礎(chǔ)之上進(jìn)行的二次開(kāi)發(fā)做了不少改進(jìn),不過(guò)這也導(dǎo)致包比 Picasso 大不少,不過(guò)也就不到 500k(Picasso 是100多k),用法較為復(fù)雜,不過(guò)畢竟級(jí)別還是蠻小的,影響不是很大

對(duì)比Fresco

使用較Fresco簡(jiǎn)單,但性能(加載速度 & 緩存)卻比不上Fresco

6. 應(yīng)用場(chǎng)景

根據(jù)Glide的特點(diǎn)和與其他圖片加載庫(kù)的對(duì)比,可以得出其使用場(chǎng)景:

需要更多的內(nèi)容表現(xiàn)形式(如Gif);

更高的性能要求(緩存 & 加載速度);

7. 總結(jié)

Glide使用起來(lái)是不是非常簡(jiǎn)單?相信你看完這篇文章后你能全面掌握Glide的用法

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/70561.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<