Android圖片載入框架:ImageLoader,Volley,Picasso,Glide,Fresco
阿新 • • 發佈:2019-01-31
1.ImageLoader
2.Volley
3.picasso
4.glide
5.fresco
首先:以前自己一直是使用ImageLoader的,,ImageLoader大家都是知道的,使用最廣泛,使用方式也是最靈活的,,但後續出現了很多圖片載入框架,自己也沒去體驗, 有一天,當ImageLoader無法滿足,或者看到別人的專案框架圖片載入比自己更佳流暢的時候,,發現,自己該學習新知識了,第一次發部落格,寫的很亂
Universal Image Loader:一個強大的圖片載入庫,包含各種各樣的配置,最老牌,使用也最廣泛。 Picasso: Square出品,必屬精品。和OkHttp搭配起來更配呦! Volley ImageLoader:Google官方出品,可惜不能載入本地圖片~ Fresco:Facebook出的,天生驕傲!不是一般的強大。 Glide:Google推薦的圖片載入庫,專注於流暢的滾動。
1.volley-imageloader
基於volley的 圖片框架,使用需要自己配置,因為volley自身是不帶圖片載入的 配置,有時間補上
2.picasso 是square公司開源的一個Android圖形快取庫使用也非常簡單
使用方式: (1) 匯入外部庫 compile 'com.squareup.picasso:picasso:2.5.2' (2) Picasso.with(context).load("載入地址").placeholder("載入前顯示的圖片").error("錯誤顯示的圖片").centerCrop("型別吧").resize("大小").into("要顯示的Image"); 優點: (1)在adapter中需要取消已經不在視野範圍的ImageView圖片資源的載入,否則會導致圖片錯位,Picasso已經解決了這個問題。 (2)使用複雜的圖片壓縮轉換來儘可能的減少記憶體消耗 (3)自帶記憶體和硬碟二級快取功能 部分解決方案:[解決方案](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0731/1639.html)
3.glide 像是picasso的高仿版,使用方式 一模一樣幾乎,,但個人推薦使用glide,自我測試,記憶體消耗極小,載入速度快於picasso ,更適合使用在滑動listview 裡面的圖片,google推薦的,,現在做的小應用都是用了glide
使用方式: (1)匯入外部庫 compile 'com.github.bumptech.glide:glide:3.6.1' (2)Glide.with(mContext).load(url).placeholder(R.drawable.loading_spinner) .crossFade().into(myImageView);//crossFade()漸現效果 部分解決方案:[解決Listview裡面image無法設定set, 或者返回drawbler返回自己設定一些效果等](http://www.wtoutiao.com/p/z53DE5.html)
4.fresco 自從不用ImageLoader後,就是用了fresco fresco是facebook推出的一款強大的android圖片處理庫, 太強大了 唯一的缺點就是太大了,使用後app至少曾不到2M,,不適合小應用使用
使用方式 :
1.匯入外部庫 compile 'com.facebook.fresco:fresco:0.6.0' //0.8.0
2.Application初始化 Fresco.initialize(this);//強大的圖片載入框架
3.開始使用:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/find_head_img"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginRight="@dimen/padding_size"
fresco:failureImage="@drawable/user_head_img"
fresco:placeholderImage="@drawable/user_head_img" />
針對 fresco 自己封裝了幾個小工具
/**
* 普通顯示
* */
public static void showFescoBitmap(SimpleDraweeView drawee,String url){
//方法二
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url))
.setAutoRotateEnabled(true)//自動旋轉
.setProgressiveRenderingEnabled(false)//是否支援漸進式載入
.build();
DraweeController draweeController= Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(drawee.getController())//可節省不必要的記憶體
.setAutoPlayAnimations(true)
.build();
drawee.setController(draweeController);
}
/**
* 普通顯示
* */
public static void showFescoBitmap2(Context context,SimpleDraweeView drawee,String url,int drawId){
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url))
.setAutoRotateEnabled(true)//自動旋轉
.setProgressiveRenderingEnabled(false)//是否支援漸進式載入
.build();
DraweeController draweeController= Fresco.newDraweeControllerBuilder()
.setTapToRetryEnabled(true)//載入失敗時,會重試4次
.setImageRequest(request)
.setAutoPlayAnimations(true)
.build();
GenericDraweeHierarchyBuilder builder =//用來設定載入失敗,載入中,載入前圖片,等效果
new GenericDraweeHierarchyBuilder(context.getResources());
GenericDraweeHierarchy hierarchy = builder
.setFadeDuration(300)
.setPlaceholderImage(context.getResources().getDrawable(drawId))
.setFailureImage(context.getResources().getDrawable(drawId))
// .setOverlays(overlaysList)
.build();
drawee.setHierarchy(hierarchy);
drawee.setController(draweeController);
}
/**
* 顯示圓角
* */
public static void showFescoRoundBitmap(SimpleDraweeView draweeView,String url){
DraweeController draweeController2 = Fresco.newDraweeControllerBuilder().setUri(Uri.parse(url)).setAutoPlayAnimations(true).build();
draweeView.setController(draweeController2);
RoundingParams mRoundParams2 = RoundingParams.fromCornersRadius(7f);
mRoundParams2.setRoundAsCircle(true);//圓圈 - 設定roundAsCircle為true
mRoundParams2.setBorder(Color.parseColor("#ffffff"),3);//顯示邊框的顏色
//mRoundParams2.setOverlayColor(Color.parseColor("#ffffff"));//用來繪製非圓角顏色
draweeView.getHierarchy().setRoundingParams(mRoundParams2);
}
/**
* 解決圖片縮放
* */
public static void showFescoScrolBitmap(SimpleDraweeView draweeView,String url,int width,int height){
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url))
.setResizeOptions(new ResizeOptions(width, height))
.build();
PipelineDraweeController controller = (PipelineDraweeController) Fresco.newDraweeControllerBuilder()
.setOldController(draweeView.getController())
.setImageRequest(request)
.build();
draweeView.setController(controller);
}