日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android图片加载框架之(Glide和Picasso的区别,Glide的简单使用)

發布時間:2023/12/18 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android图片加载框架之(Glide和Picasso的区别,Glide的简单使用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Glide,一個被google所推薦的圖片加載庫,常見的還有Picasso,Fresco等,每一個都非常穩定,功能也都十分強大。但是它們的使用場景基本都是重合的,也就是說我們基本只需要選擇其中一個來進行學習和使用就足夠了,每一個框架都嘗試去掌握的話則有些浪費時間。最常用的是Glide和Picasso,今天就針對于Glide和Picasso的區別,以及Glide的簡單使用來進行具體介紹

Picasso的基本用法

Picasso.with(this)?.load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“)?.into(ivImgPicasso);

Picasso.with(this)?.load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“)?.resize(768, 432)?.into(ivImgPicasso);

Picasso.with(this)?.load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“)?.fit()?.centerCrop()?.into(ivImgPicasso);

這三種方法都可以加載圖片顯示到頁面上,

第一種:加載了全尺寸的圖片到內存,然后讓GPU來實時重繪大小

第二種:你需要主動計算ImageView的大小,或者說你的ImageView大小是具體的值(而不是wrap_content),

第三種:按統一比例縮放圖片(保存圖片的尺寸比例)便于圖片的二維(寬度和高度)等于或者大于相應的視圖的維度,這種方法和Glide加載圖片占用的內存幾乎是相同的,雖然內存開銷差距不大,但是在這個問題上Glide完勝Picasso。因為Glide可以自動計算出任意情況下的ImageView的大小。


Glide的基本用法:

Glide.with(this)?.load("圖片的URL")?.into(ivImgGlide);

load方法中不僅可以傳入圖片地址,還可以傳入圖片文件File,resource,圖片的byte數組等

Glide與Picasso的區別:

1、內存:

????????????加載同一張圖片Picasso,Picasso的內存開銷仍然遠大于Glide。

2、Image質量的細節:

????????????Glide默認的是Bitmap格式是RGB-565

????????????Picasso默認ARGB_8888格式

????????? ?Glide加載的圖片沒有Picasso那么平滑,但是很難察覺

3、磁盤緩存:? ?? ?

????????(1)Picasso緩存的是全尺寸的。而Glide緩存的跟ImageView尺寸相同

??????(2)將ImageView調整成不同大小不管大小如何設置。Picasso只緩存一個全尺寸的。Glide則不同,它會為每種大小的ImageView緩存一次

????????????讓Glide既緩存全尺寸又緩存其他尺寸的方法:

Glide.with(this)?.load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“)?.diskCacheStrategy(DiskCacheStrategy.ALL)?.into(ivImgGlide);

Glide的這種方式優點是加載顯示非常快。而Picasso的方式則因為需要在顯示之前重新調整大小而導致一些延遲,Glide比Picasso快,雖然需要更大的空間來緩存。

4、Gif動圖

????????????Glide可以加載Gif動圖,Picasso不可以加載動圖

????????????Glide動畫會消耗太多的內存,因此使用時謹慎使用

總結一下他們之間的區別:

(1)Glide比Picasso加載速度快,但Glide比Picasso需要更大的空間來緩存;

(2)Glide加載圖像及磁盤緩存的方式都優于Picasso,且Glide更有利于減少OutOfMemoryError的發生;

(3)Glide可以加載Gif動圖,Picasso不可以加載動圖

(4)Picasso加載的圖片比Glide加載的圖片平滑(可忽略不計)

Glide的具體使用方法:

1、基本使用: 添加依賴,現在Glide最新的依賴有4.x.x的 dependencies {compile 'com.github.bumptech.glide:glide:3.7.0' }

基本使用是:

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

2、with()

this可以是:

Context Activity Fragment FragmentActivity ApplicationContext Context、Activity、Fragment、FragmentActivity,都是glide經過方法都是向activity中添加一個fragment,因為glide無法直接獲取到activity,添加一個與activity綁定的fragment,可以保證glide隨著activity的生命周期變化而停止暫時取消加載請求。

3、load()

load是核心的請求方法, 在源碼中我們可以看到是在這里進行網絡請求,

// 加載本地圖片 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);

4、占位圖

我們在實際加載圖片的時候,由于各種原因比如網慢,一時無法請求回數據時,考慮到用戶體驗,一個占位圖也是非常重要的

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

5、動圖

asBitmap()去加載gif圖片,那么只會顯示靜態圖片,并且只顯示動圖的第一幀?
.asGif()去加載靜態圖片會顯示錯誤圖片,報錯。

Glide.with(this).load(url).asBitmap().placeholder(R.drawable.loading).error(R.drawable.error).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);

6、Glide 使用加載動畫和禁止動畫

glide默認有淡入淡出動畫.crossFade()也可以不加,也有重載.crossFade(int duration),主要設置動畫進行快慢,默認是300毫秒。

Glide.with(context).load(UsageExampleListViewAdapter.eatFoodyImages[0]).placeholder(R.mipmap.ic_launcher) .error(R.mipmap.future_studio_launcher).crossFade().into(imageViewFade);

7、設置圖片大小;

.override(300, 200); //設置加載圖片尺寸大小

8、圖片請求的優先級

Glide可以通過Priority枚舉來設置加載圖片的優先級,具體使用場景就是,我們點擊一個頁面時,先加載頁面中重要的圖片,再加載那些子圖像

Priority (優先級)枚舉給了四個不同的選項,下面是按照遞增priority(優先級)的

Priority.LOW 最低 Priority.NORMAL 正常 Priority.HIGH 最高 Priority.IMMEDIATE 立即

注意:優先級并不是完全嚴格遵守的。Glide 將會用他們作為一個準則,并盡可能的處理這些請求,但是它不能保證所有的圖片都會按照所要求的順序加載。

.priority(Priority.HIGH);

9、縮略圖

縮略圖不同于前面提到的占位圖。占位圖應當是跟app綁定在一起的資源。縮略圖是一個動態的占位圖,可以從網絡加載。縮略圖也會被先加載,直到實際圖片請求加載完畢。如果因為某些原因,縮略圖獲得的時間晚于原始圖片,它并不會替代原始圖片,而是簡單地被忽略掉。具體的應用場景有很多,可以提供幾張圖片便于大家理解


圖中的1,2,3,4,5,6就是縮略圖,7,就是原圖;這樣大家應該會理解一點了,我覺得吧(這里只是說一下自己的觀點)縮略圖一是用戶體驗較好,從用戶的角度,我們已經看見了一個小版本的圖片。點擊才會加載同樣的圖片(高分辨率),二是省流量,一張原圖或許需要幾M但是一張縮略圖或許只需要幾K,

那怎么加載縮略圖呢?Glide提供了2個不同的方法產生縮略圖。

第一種,是通過在加載的時候指定一個小的分辨率,產生一個縮略圖。

.thumbnail( 0.1f )里面的參數是一個浮點乘法運算這個方法是啥意思呢?

例如,傳遞一個0.1f作為參數,Glide會加載原始圖片大小的10%的圖片。

原始圖片---->1000x1000像素,

則縮略圖---->100x100像素。

由于圖片將會比ImageView小,你需要確保縮放類型是否正確。

注意:你所有的請求設置都會影響到你的縮略圖。例如,如果你使用了一個變換讓你的圖片變為灰度圖,縮略圖也同樣將會是灰度圖。

第二個方法是傳遞一個新的Glide請求作為參數,我們看看例子

這種方法的應用場景:雖然用.thunmbnail()這種方法簡單有效,但也不是總有意義的。為啥這么說呢,如果縮略圖需要從網絡加載同樣全分辨率圖片,可能不是不快。所以提供了第二種方法
DrawableRequestBuilder<String> thumbnailRequest = Glide.with( context ).load( eatFoodyImages[2] );Glide.with( context ).load( UsageExampleGifAndVideos.gifUrl ).thumbnail( thumbnailRequest ).into( imageView3 );

第一個縮略圖請求跟第二個是完全沒有關系的,可以是不同的Url,對其進行不同的轉換

如果你覺得不夠刺激,你還可以用遞歸用一個額外的縮略圖去請求一個縮略圖

10、緩存

?我們都知道Glide是自帶緩存的,所有的圖片請求都會被緩存在內存和磁盤上。大多數情況下,緩存是一個非常有用的東西,但在一些特殊的情況下并不是很明智。比如,如果你有一張不段變化的圖片,但是都是用的同一個URL,這時候就需要我們避免緩存,Glide提供了一些方法避免內存存儲和磁盤存儲;

禁止內存存儲:

.skipMemoryCache( true )

去特意告訴Glide跳過內存緩存,這個只影響內存緩存!Glide為了避免以后的網絡請求,仍然會緩存到磁盤

禁止磁盤存儲:

如果你想要禁止請求的磁盤緩存,使用枚舉型變量DiskCacheStrategy.NONE作為參數。

.diskCacheStrategy( DiskCacheStrategy.NONE )

.diskCacheStrategy()中枚舉參數以及意義:

DiskCacheStrategy.NONE 啥也不緩存DiskCacheStrategy.SOURCE 只緩存全尺寸圖.DiskCacheStrategy.RESULT 只緩存最終降低分辨后用到的圖片DiskCacheStrategy.ALL 緩存所有類型的圖片 (默認)

結合兩個方法就可以同時禁止內存存儲和磁盤緩存了

上面是我對Glide的簡單理解,希望可以幫助到大家!之后會對Glide源碼進行分析,有問題可以在評論區留言。

May everyone be happy every day and everything go well!







總結

以上是生活随笔為你收集整理的Android图片加载框架之(Glide和Picasso的区别,Glide的简单使用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。