1.ImageLoaderhtml
首先:之前本身一直是使用ImageLoader的,,ImageLoader你們都是知道的,使用最普遍,使用方式也是最靈活的,,但後續出現了不少圖片加載框架,本身也沒去體驗, 有一天,當ImageLoader沒法知足,或者看到別人的項目框架圖片加載比本身更佳流暢的時候,就研究了一下如今最流行的幾種圖片加載方式。android
Universal Image Loader:一個強大的圖片加載庫,包含各類各樣的配置,最老牌,使用也最普遍。 Picasso: Square出品,必屬精品。和OkHttp搭配起來更配呦! Volley ImageLoader:Google官方出品,惋惜不能加載本地圖片~ Fresco:Facebook出的,天生驕傲!不是通常的強大。 Glide:Google推薦的圖片加載庫,專一於流暢的滾動。
1.volley-imageloader
基於volley的 圖片框架,使用須要本身配置,由於volley自身是不帶圖片加載的配置,這裏就不作詳細介紹了。git
2.picasso 是square公司開源的一個Android圖形緩存庫使用也很是簡單github
使用方式: (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是facebook推出的一款強大的android圖片處理庫, 太強大了,可是惟一的缺點就是太大了,使用後app至少增長2M,不適合小應用使用app
使用方式 : 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); }