一、Picasso
gradle依賴: compile'com.squareup.picasso:picasso:2.5.2'
使用非常簡單:
Picasso.with(this).load("").error(R.mipmap.ic_launcher). placeholder(R.mipmap.ic_launcher). resize(50, 50).config(Bitmap.Config.ARGB_8888). memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE). networkPolicy(NetworkPolicy.NO_CACHE). centerInside().into(iv);
二、Glide(支持gif)用法跟picasso差不多
studio添加依賴:
repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}
使用:跟Picasso類
Glide.with(this).load("file://...."). placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).//佔位圖/加載錯誤 override(50,50).//指定他顯示寬高 skipMemoryCache(false).//內存緩存 diskCacheStrategy(DiskCacheStrategy.NONE).//緩存原尺寸和各種尺寸 centerCrop().//顯示方式/fitCenter into(imageView);
(一)GlideTransformation 基於Glide的圖片處理,支持各種圖片樣式
使用:
三、UniversalImageLoader
不支持compile,需下載copy到工程lib下
1.在Application初始化
創建默認的ImageLoader配置參數
File cacheDir = getImagePath(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions .threadPoolSize(3) // default .threadPriority(Thread.NORM_PRIORITY - 1) // default .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory().memoryCache(
new LruMemoryCache(20 * 1024 * 1024)) .memoryCacheSize(20 * 1024 * 1024).memoryCacheSizePercentage(13) // default .diskCache(new UnlimitedDiskCache(cacheDir)) // 自定義緩存路徑 // default .diskCacheSize(80 * 1024 * 1024).diskCacheFileCount(100) .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default .imageDownloader(new BaseImageDownloader(this)) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs().writeDebugLogs().build(); ImageLoader.getInstance().init(config);// 全局初始化此配置
//得到實例
ImageLoader loader = ImageLoader.getInstance();
2.使用
//根據不同需求,配置他的緩存,默認圖片,圖片樣式等 DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // resource or drawable .showImageForEmptyUri(R.mipmap.ic_launcher) // resource or drawable .showImageOnFail(R.mipmap.ic_launcher) // resource or drawable .resetViewBeforeLoading(false) // default .delayBeforeLoading(1000) .cacheInMemory(false) // default .cacheOnDisk(false) // default .considerExifParams(false) // default .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default .bitmapConfig(Bitmap.Config.ARGB_8888) // default使用RGB_565會比使用ARGB_8888少 消耗2倍的內存 .displayer(new SimpleBitmapDisplayer()) // default -- RoundedBitmapDisplayer .handler(new Handler()) // default .build();
loader.displayImage(String url,ImageView iv,DiaplayImageOptions options);//支持異步獲得圖片
loader.loadImage(String url,ImageSize size,DisplayImageOptions options,ImageLoadingImageListener listener);
............................
有着與activity相同的生命週期,還可以取消掉具體的imageview
loader.clearDiskCache();//清除磁盤緩存 loader.clearMemoryCache();//清楚內存緩存 loader.pause(); loader.resume(); loader.stop(); loader.destroy();
loader.cancelDisplayTask(imageView);
四、Fresco
gradle: compile
'com.facebook.fresco:fresco:0.11.0'
使用:
是基於fresco的控件加載圖片的,初始化
//最簡單的使用就是:
simpleDraweeView.setImageURI("");
控件基本屬性:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="20dp" // 不支持wrap_content 如果要設置寬高比, 需要在Java代碼中指定setAspectRatio(1.33f);
android:layout_height="20dp" // 不支持wrap_content
fresco:fadeDuration="300"
fresco:actualImageScaleType="focusCrop" // 設置圖片縮放. 通常使用focusCrop,該屬性值會通過算法把人頭像放在中間
fresco:placeholderImage="@color/wait_color" // 下載成功之前顯示的圖片
fresco:placeholderImageScaleType="fitCenter"
fresco:failureImage="@drawable/error"// 加載失敗的時候顯示的圖片
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@drawable/retrying"// 加載失敗,提示用戶點擊重新加載的圖片(會覆蓋failureImage的圖片)
fresco:retryImageScaleType="centerCrop"
fresco:progressBarImage="@drawable/progress_bar"// 提示用戶正在加載,和加載進度無關
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="1000"
fresco:backgroundImage="@color/blue"
fresco:overlayImage="@drawable/watermark"
fresco:pressedStateOverlayImage="@color/red"
fresco:roundAsCircle="false"// 是不是設置圓圈
fresco:roundedCornerRadius="1dp"// 圓角角度,180的時候會變成圓形圖片
fresco:roundTopLeft="true"
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth="2dp"
fresco:roundingBorderColor="@color/border_color"
/>
android:id="@+id/my_image_view"
android:layout_width="20dp" // 不支持wrap_content 如果要設置寬高比, 需要在Java代碼中指定setAspectRatio(1.33f);
android:layout_height="20dp" // 不支持wrap_content
fresco:fadeDuration="300"
fresco:actualImageScaleType="focusCrop" // 設置圖片縮放. 通常使用focusCrop,該屬性值會通過算法把人頭像放在中間
fresco:placeholderImage="@color/wait_color" // 下載成功之前顯示的圖片
fresco:placeholderImageScaleType="fitCenter"
fresco:failureImage="@drawable/error"// 加載失敗的時候顯示的圖片
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@drawable/retrying"// 加載失敗,提示用戶點擊重新加載的圖片(會覆蓋failureImage的圖片)
fresco:retryImageScaleType="centerCrop"
fresco:progressBarImage="@drawable/progress_bar"// 提示用戶正在加載,和加載進度無關
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="1000"
fresco:backgroundImage="@color/blue"
fresco:overlayImage="@drawable/watermark"
fresco:pressedStateOverlayImage="@color/red"
fresco:roundAsCircle="false"// 是不是設置圓圈
fresco:roundedCornerRadius="1dp"// 圓角角度,180的時候會變成圓形圖片
fresco:roundTopLeft="true"
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth="2dp"
fresco:roundingBorderColor="@color/border_color"
/>
增加一些設置(尺寸。類型監聽。。。)
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse("")). setImageType(ImageRequest.ImageType.DEFAULT). disableDiskCache().setAutoRotateEnabled(false).setResizeOptions(
new ResizeOptions(50, 50)).build(); DraweeController controller = Fresco.newDraweeControllerBuilder().setUri(""). setControllerListener(controlListener).setImageRequest(request)
.setAutoPlayAnimations(true).build();
simpleDraweeView.setController(controller);
五、XUtils
gradle: compile
'org.xutils:xutils:3.3.36'
簡單使用:
x.Ext.init(getApplication());//初始化放在application ImageOptions options = new ImageOptions.Builder().setConfig(Bitmap.Config.RGB_565). setFadeIn(true).setIgnoreGif(false).setCrop(true). setLoadingDrawableId(0).setFailureDrawableId(0).setForceLoadingDrawable(true). setImageScaleType(ImageView.ScaleType.CENTER_CROP).setPlaceholderScaleType(
ImageView.ScaleType.CENTER_CROP). setSize(50, 50).setRadius(5).setUseMemCache(true).setSquare(true).build(); x.image().bind(imageView, "http://...", options);
可以設置他的回調callback
關於圖片加載,還有Volley的ImageLoader...