Android常用的圖片加載庫(kù)
前言:圖片加載涉及到圖片的緩存、圖片的處理、圖片的顯示等。四種常用的圖片加載框架,分別是Fresco、ImageLoader、 Picasso、 Glide。
Universal Image Loader:ImageLoader是比較老的框架,一個(gè)強(qiáng)大的圖片加載庫(kù),包含各種各樣的配置,最老牌,使用也最廣泛。
ImageLoader開(kāi)源庫(kù)存哪些特征:
1.多線程下載圖片,圖片可以來(lái)源于網(wǎng)絡(luò),文件系統(tǒng),項(xiàng)目文件夾assets中以及drawable中等
2.支持隨意的配置ImageLoader,例如線程池,圖片下載器,內(nèi)存緩存策略,硬盤緩存策略,圖片顯示選項(xiàng)以及其他的一些配置
3.支持圖片的內(nèi)存緩存,文件系統(tǒng)緩存或者SD卡緩存
4.支持圖片下載過(guò)程的監(jiān)聽(tīng)
5.根據(jù)控件(ImageView)的大小對(duì)Bitmap進(jìn)行裁剪,減少Bitmap占用過(guò)多的內(nèi)存
6.較好的控制圖片的加載過(guò)程,例如暫停圖片加載,重新開(kāi)始加載圖片,一般使用在ListView,GridView中,滑動(dòng)過(guò)程中暫停加加載圖片,停止滑動(dòng)的時(shí)候去加載圖片
7.提供在較慢的網(wǎng)絡(luò)下對(duì)圖片進(jìn)行加載
Glide:Google推薦的圖片加載庫(kù),專注于流暢的滾動(dòng)。
Glide開(kāi)源庫(kù)特征:
1.支持 Gif、WebP、縮略圖。甚至是 Video,所以更該當(dāng)做一個(gè)媒體緩存。
2.支持優(yōu)先級(jí)處理。
3.內(nèi)存友好,圖片默認(rèn)使用默認(rèn) RGB_565 而不是 ARGB_888,雖然清晰度差些,但圖片更小,也可配置到 ARGB_888等...
Picasso:Picasso是Square公司出品的一款非常優(yōu)秀的開(kāi)源圖片加載庫(kù),是目前Android開(kāi)發(fā)中超級(jí)流行的圖片加載庫(kù)之一,和OkHttp搭配起來(lái)更配呦!
Fresco:Facebook出的,天生驕傲!不是一般的強(qiáng)大。
效果(具體見(jiàn)源碼):

開(kāi)發(fā)環(huán)境:AndroidStudio2.2.1+gradle-2.14.1
引入依賴:
//適配器 compile 'com.classic.adapter:commonadapter:1.2' //注解式開(kāi)發(fā) compile 'com.jakewharton:butterknife:7.0.1' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4' compile 'com.github.bumptech.glide:glide:3.6.1' compile 'com.squareup.picasso:picasso:2.5.2'
涉及知識(shí):
1.注解式開(kāi)發(fā)+(Commonadapter)萬(wàn)能適配器使用
2.圖片加載庫(kù):ImageLoader、Glide、Picasso
3.WebView+SwipeRefreshLayout實(shí)現(xiàn)加載和刷新網(wǎng)頁(yè)
部分代碼(Gilde使用):
public class GildeActivity extends BaseActivity {
/**
* Glide的主要目的有兩個(gè):
* 1.一個(gè)是實(shí)現(xiàn)平滑的圖片列表滾動(dòng)效果,
* 2.另一個(gè)是支持遠(yuǎn)程圖片的獲取、大小調(diào)整和展示
* 3.支持Gif 動(dòng)畫和視頻劇照解碼、智能的暫停和重新開(kāi)始請(qǐng)求、支持縮略圖
* http://www.open-open.com/lib/view/open1440397324450.html
*/
@Bind(R.id.img)
ImageView img;
@Bind(R.id.listview)
ListView listView;
private String imgurl = "http://avatar.csdn.net/4/A/A/1_zhh_csdn_ard.jpg";
@Override
protected int setContentView() {
return R.layout.gilde_img_layout;
}
@Override
protected void initLayout() {
GlideAdapter adapter = new GlideAdapter(this, R.layout.listview_img_item, AppConfig.resultImgData());
listView.setAdapter(adapter);
}
@OnClick({R.id.btn0, R.id.btn1, R.id.btn2})
void onClick(View v) {
switch (v.getId()) {
case R.id.btn0:
test0();
break;
case R.id.btn1:
test1();
break;
case R.id.btn2:
// 必須在UI線程中調(diào)用
Glide.get(GildeActivity.this).clearMemory();
break;
}
}
//基礎(chǔ)glide網(wǎng)絡(luò)圖片加載
// Glide的with方法不光接受Context,還接受Activity 和 Fragment,Context會(huì)自動(dòng)的從他們獲取
// 圖片的縮放,centerCrop()和fitCenter():
//使用centerCrop是利用圖片圖填充ImageView設(shè)置的大小,如果ImageView的
private void test0() {
Glide.with(this)
.load(imgurl)//路徑支持png,jpg,gif,mp4
.placeholder(R.mipmap.ic_launcher) // 預(yù)加載圖片
.error(R.mipmap.ic_launcher)//加載圖片失敗
.crossFade()//淡入淡出動(dòng)畫效果
.centerCrop()
.into(img);
}
//gif顯示
private void test1() {
Glide.with(this)
.load("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&
sec=1491037864865&di=cc8f78a7e5c1d359839cec3463123b47&imgtype=0&
src=http%3A%2F%2Fi.zeze.com%2Fattachment%2Fforum%2F201501%2F29%2F181236dyjtsu2qinms5qjz.jpg")
.asGif() //判斷加載的url資源是否為gif格式的資源
.placeholder(R.mipmap.ic_launcher) // 預(yù)加載圖片
.error(R.mipmap.ic_launcher)//加載圖片失敗
.into(img);
// .into(new GlideDrawableImageViewTarget(img, 1));//如果要控制Gif 顯示次數(shù),可以使用
}
// 顯示本地視頻
private void test2() {
String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide
.with(this)
.load(Uri.fromFile(new File(filePath)))
.into(img);
}
//緩存
private void test3() {
Glide
.with(this)
.load(imgurl)
.skipMemoryCache(true) //跳過(guò)內(nèi)存緩存
.into(img);
}
//緩存
private void test4() {
Glide
.with(this)
.load(imgurl)
.diskCacheStrategy(DiskCacheStrategy.NONE) //跳過(guò)硬盤緩存
.into(img);
}
/**
* DiskCacheStrategy.NONE 什么都不緩存
* DiskCacheStrategy.SOURCE 僅僅只緩存原來(lái)的全分辨率的圖像
* DiskCacheStrategy.RESULT 僅僅緩存最終的圖像,即降低分辨率后的(或者是轉(zhuǎn)換后的)
* DiskCacheStrategy.ALL 緩存所有版本的圖像(默認(rèn)行為)
*/
// 使用Glide 顯示圓形圖片
private void test5() {
Glide.with(this).load(imgurl).asBitmap().centerCrop().into(new BitmapImageViewTarget(img) {
@Override
protected void setResource(Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(GildeActivity.this.getResources(), resource);
circularBitmapDrawable.setCircular(true);
img.setImageDrawable(circularBitmapDrawable);
}
});
}
}
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- Android Fresco圖片加載優(yōu)化的方案
- Android實(shí)現(xiàn)圖片加載進(jìn)度提示
- Android框架Volley使用:ImageRequest請(qǐng)求實(shí)現(xiàn)圖片加載
- Android編程圖片加載類ImageLoader定義與用法實(shí)例分析
- Android基于Glide v4.x的圖片加載進(jìn)度監(jiān)聽(tīng)
- Android ListView實(shí)現(xiàn)ImageLoader圖片加載的方法
- Android圖片加載案例分享
- Android中RecyclerView 滑動(dòng)時(shí)圖片加載的優(yōu)化
- Android圖片加載框架Glide的基本用法介紹
- Android圖片加載利器之Picasso基本用法
- Android 官推 kotlin-first 的圖片加載庫(kù)——Coil的使用入門
相關(guān)文章
Android 獲取系統(tǒng)語(yǔ)言的實(shí)例(兼容7.0)
下面小編就為大家?guī)?lái)一篇Android 獲取系統(tǒng)語(yǔ)言的實(shí)例(兼容7.0)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Flutter通過(guò)Container實(shí)現(xiàn)時(shí)間軸效果
時(shí)間軸是前端UI經(jīng)常用到的效果,本文講解下Flutter如何通過(guò)Container實(shí)現(xiàn),感興趣的朋友可以了解下2021-05-05
Android RecyclerView添加上拉加載更多效果
這篇文章主要為大家詳細(xì)介紹了Android RecyclerView添加上拉加載更多效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android對(duì)圖片Drawable實(shí)現(xiàn)變色示例代碼
這篇文章主要給大家介紹了關(guān)于Android對(duì)圖片Drawable實(shí)現(xiàn)變色的相關(guān)資料,文中通過(guò)示例代碼將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08
詳解Android應(yīng)用中preference首選項(xiàng)的編寫方法
這篇文章主要介紹了Android應(yīng)用中preference首選項(xiàng)的編寫方法,或許Apple將其翻譯為'偏好設(shè)置'更直觀些,即用戶對(duì)應(yīng)用的一些個(gè)性化調(diào)整菜單,需要的朋友可以參考下2016-04-04
使用Broadcast實(shí)現(xiàn)Android組件間的通信
這篇文章主要為大家詳細(xì)介紹了使用Broadcast實(shí)現(xiàn)Android組件間的通信,感興趣的小伙伴們可以參考一下2016-06-06
Android編程實(shí)現(xiàn)ListView滾動(dòng)提示等待框功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)ListView滾動(dòng)提示等待框功能,結(jié)合實(shí)例形式分析了Android ListView滾動(dòng)事件相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02
Android在fragment中編寫toobar的步驟詳解
這篇文章主要介紹了Android在fragment中編寫toobar,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01

