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

開發(fā)環(huán)境:AndroidStudio2.2.1+gradle-2.14.1
引入依賴:
//適配器 compile 'com.classic.adapter:commonadapter:1.2' //注解式開發(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'
涉及知識:
1.注解式開發(fā)+(Commonadapter)萬能適配器使用
2.圖片加載庫:ImageLoader、Glide、Picasso
3.WebView+SwipeRefreshLayout實現(xiàn)加載和刷新網(wǎng)頁
部分代碼(Gilde使用):
public class GildeActivity extends BaseActivity {
/**
* Glide的主要目的有兩個:
* 1.一個是實現(xiàn)平滑的圖片列表滾動效果,
* 2.另一個是支持遠程圖片的獲取、大小調(diào)整和展示
* 3.支持Gif 動畫和視頻劇照解碼、智能的暫停和重新開始請求、支持縮略圖
* 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;
}
}
//基礎glide網(wǎng)絡圖片加載
// Glide的with方法不光接受Context,還接受Activity 和 Fragment,Context會自動的從他們獲取
// 圖片的縮放,centerCrop()和fitCenter():
//使用centerCrop是利用圖片圖填充ImageView設置的大小,如果ImageView的
private void test0() {
Glide.with(this)
.load(imgurl)//路徑支持png,jpg,gif,mp4
.placeholder(R.mipmap.ic_launcher) // 預加載圖片
.error(R.mipmap.ic_launcher)//加載圖片失敗
.crossFade()//淡入淡出動畫效果
.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) // 預加載圖片
.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) //跳過內(nèi)存緩存
.into(img);
}
//緩存
private void test4() {
Glide
.with(this)
.load(imgurl)
.diskCacheStrategy(DiskCacheStrategy.NONE) //跳過硬盤緩存
.into(img);
}
/**
* DiskCacheStrategy.NONE 什么都不緩存
* DiskCacheStrategy.SOURCE 僅僅只緩存原來的全分辨率的圖像
* DiskCacheStrategy.RESULT 僅僅緩存最終的圖像,即降低分辨率后的(或者是轉(zhuǎn)換后的)
* DiskCacheStrategy.ALL 緩存所有版本的圖像(默認行為)
*/
// 使用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);
}
});
}
}
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
- Android Fresco圖片加載優(yōu)化的方案
- Android實現(xiàn)圖片加載進度提示
- Android框架Volley使用:ImageRequest請求實現(xiàn)圖片加載
- Android編程圖片加載類ImageLoader定義與用法實例分析
- Android基于Glide v4.x的圖片加載進度監(jiān)聽
- Android ListView實現(xiàn)ImageLoader圖片加載的方法
- Android圖片加載案例分享
- Android中RecyclerView 滑動時圖片加載的優(yōu)化
- Android圖片加載框架Glide的基本用法介紹
- Android圖片加載利器之Picasso基本用法
- Android 官推 kotlin-first 的圖片加載庫——Coil的使用入門
相關文章
Android 獲取系統(tǒng)語言的實例(兼容7.0)
下面小編就為大家?guī)硪黄狝ndroid 獲取系統(tǒng)語言的實例(兼容7.0)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
Flutter通過Container實現(xiàn)時間軸效果
時間軸是前端UI經(jīng)常用到的效果,本文講解下Flutter如何通過Container實現(xiàn),感興趣的朋友可以了解下2021-05-05
Android RecyclerView添加上拉加載更多效果
這篇文章主要為大家詳細介紹了Android RecyclerView添加上拉加載更多效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
Android對圖片Drawable實現(xiàn)變色示例代碼
這篇文章主要給大家介紹了關于Android對圖片Drawable實現(xiàn)變色的相關資料,文中通過示例代碼將實現(xiàn)的方法介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-08-08
詳解Android應用中preference首選項的編寫方法
這篇文章主要介紹了Android應用中preference首選項的編寫方法,或許Apple將其翻譯為'偏好設置'更直觀些,即用戶對應用的一些個性化調(diào)整菜單,需要的朋友可以參考下2016-04-04
使用Broadcast實現(xiàn)Android組件間的通信
這篇文章主要為大家詳細介紹了使用Broadcast實現(xiàn)Android組件間的通信,感興趣的小伙伴們可以參考一下2016-06-06
Android編程實現(xiàn)ListView滾動提示等待框功能示例
這篇文章主要介紹了Android編程實現(xiàn)ListView滾動提示等待框功能,結(jié)合實例形式分析了Android ListView滾動事件相關實現(xiàn)技巧,需要的朋友可以參考下2017-02-02
Android在fragment中編寫toobar的步驟詳解
這篇文章主要介紹了Android在fragment中編寫toobar,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01

