依赖为
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
在application中配置如下代码进行初始化
public void initImageLoaderConfiguration(Context context) {
//缓存文件目录
File cacheDir = StorageUtils.getCacheDirectory(context);
Log.d(TAG, "cacheDir:" + cacheDir);
//构建配置
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
//默认屏幕的大小
.memoryCacheExtraOptions(480, 800)
// 内存缓存的设置选项 (最大图片宽度,最大图片高度) 默认当前屏幕分辨率
.diskCacheExtraOptions(480, 800, null)
// 设置自定义加载和显示图片的线程池
.taskExecutor(DefaultConfigurationFactory.createExecutor(3, Thread.NORM_PRIORITY, QueueProcessingType.LIFO))
// 设置自定义加载和显示内存缓存或者硬盘缓存图片的线程池
.taskExecutorForCachedImages(DefaultConfigurationFactory.createExecutor(3, Thread.NORM_PRIORITY, QueueProcessingType.LIFO))
// 设置显示图片线程池大小,默认为3
// 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
.threadPoolSize(3)
// 设置图片加载线程的优先级,默认为Thread.NORM_PRIORITY-1
// 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
.threadPriority(Thread.NORM_PRIORITY - 2) // default
// 设置图片加载和显示队列处理的类型 默认为QueueProcessingType.FIFO
// 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
// 设置拒绝缓存在内存中一个图片多个大小 默认为允许,(同一个图片URL)根据不同大小的imageView保存不同大小图片
.denyCacheImageMultipleSizesInMemory()
// 设置内存缓存 默认为一个当前应用可用内存的1/8大小的LruMemoryCache
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
// 设置内存缓存的最大大小 默认为一个当前应用可用内存的1/8
.memoryCacheSize(2 * 1024 * 1024)
// 设置内存缓存最大大小占当前应用可用内存的百分比 默认为一个当前应用可用内存的1/8
.memoryCacheSizePercentage(13) // default
// 设置硬盘缓存
.diskCache(new UnlimitedDiskCache(cacheDir)) //缓存路径
// 设置硬盘缓存的最大大小
.diskCacheSize(50 * 1024 * 1024)
// 设置硬盘缓存的文件的最多个数
.diskCacheFileCount(100)
// 设置硬盘缓存文件名生成规范
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
// 设置图片下载器
.imageDownloader(new BaseImageDownloader(context)) // default
// 设置图片解码器
.imageDecoder(DefaultConfigurationFactory.createImageDecoder(false))
// 设置默认的图片显示选项
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
// 打印DebugLogs
.writeDebugLogs()
//万事俱备 执行构造
.build();
//初始化配置文件
ImageLoader.getInstance().init(config);
}
在ImageLoadActivity.java文件中
public class ImageLoadActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imageload);
imageView = (ImageView) findViewById(R.id.image);
//ImageLoader.getInstance().displayImage("https://img.haomeiwen.com/i6213762/0a6b04b9db43b96e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/525",new ImageViewAware(imageView),imageOptions());//和下面那个加载图片的方式相比,第二个参数不同
ImageLoader.getInstance()
.displayImage("https://img.haomeiwen.com/i6213762/0a6b04b9db43b96e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/525",
imageView, imageOptions(), new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {
Log.d("ImageLoadActivity", "当前进度" + current + ",总共" + total);//用这个接口来监控图片的下载进度,只有下载图片会调用这个方法,缓冲本地的图片不用调用这个方法
}
});
//ImageLoader.getInstance().clearDiskCache();清除磁盘缓冲
//ImageLoader.getInstance().clearMemoryCache();清除内存缓冲
}
public static DisplayImageOptions imageOptions() {//将这个静态方法拿个工具类装起来,这里是为了方便直接这样写的
/**
* DisplayImageOptions所有配置简介
*/
DisplayImageOptions options = new DisplayImageOptions.Builder()
// 设置图片加载时的默认图片
.showImageOnLoading(R.mipmap.ic_launcher)
// 设置图片加载失败的默认图片
.showImageOnFail(R.drawable.shadow_bottom)
// 设置图片URI为空时默认图片
.showImageForEmptyUri(R.drawable.shadow_right)
// 设置是否将View在加载前复位
.resetViewBeforeLoading(false)
// 设置延迟部分时间才开始加载
// 默认为0
.delayBeforeLoading(100)
// 设置添加到内存缓存
// 默认为false
.cacheInMemory(true)
// 设置添加到硬盘缓存
// 默认为false
.cacheOnDisk(true)
// 设置规模类型的解码图像
// 默认为ImageScaleType.IN_SAMPLE_POWER_OF_2
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
// 设置位图图像解码配置
// 默认为Bitmap.Config.ARGB_8888
.bitmapConfig(Bitmap.Config.ARGB_8888)
// 设置选项的图像解码
.decodingOptions(new BitmapFactory.Options())
// 设置自定义显示器,这里是设置图片为圆形
// 默认为DefaultConfigurationFactory.createBitmapDisplayer()
.displayer(new CircleBitmapDisplayer(Color.GREEN,5))//设置图片的显示形状的时候记得给图片设置具体的数值,可以是match_parent,但不能是warp_content
// 设置自定义的handler
// 默认为new Handler()
.handler(new Handler())
// 建立
.build();
return options;
}
}
补充一下loadImage方法的用法,注意在使用loadImage方法的时候不能给DisplayImageOptions配置displayer方法,要在加载完毕后再用相应的形状进行设置
public class ImageLoadActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imageload);
imageView = (ImageView) findViewById(R.id.image);
ImageLoader.getInstance().loadImage("https://img.haomeiwen.com/i6213762/0a6b04b9db43b96e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/525", imageOptions(), new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
Log.d("ImageLoadActivity", "开始加载");
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
Log.d("ImageLoadActivity", "加载完毕");
imageView.setImageDrawable(new CircleBitmapDisplayer.CircleDrawable(loadedImage, Color.BLUE, 10));
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
public static DisplayImageOptions imageOptions() {
/**
* DisplayImageOptions所有配置简介
*/
DisplayImageOptions options = new DisplayImageOptions.Builder()
// 设置图片加载时的默认图片
.showImageOnLoading(R.mipmap.ic_launcher)
// 设置图片加载失败的默认图片
.showImageOnFail(R.drawable.shadow_bottom)
// 设置图片URI为空时默认图片
.showImageForEmptyUri(R.drawable.shadow_right)
// 设置是否将View在加载前复位
.resetViewBeforeLoading(false)
// 设置延迟部分时间才开始加载
// 默认为0
.delayBeforeLoading(100)
// 设置添加到内存缓存
// 默认为false
.cacheInMemory(true)
// 设置添加到硬盘缓存
// 默认为false
.cacheOnDisk(true)
// 设置规模类型的解码图像
// 默认为ImageScaleType.IN_SAMPLE_POWER_OF_2
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
// 设置位图图像解码配置
// 默认为Bitmap.Config.ARGB_8888
.bitmapConfig(Bitmap.Config.ARGB_8888)
// 设置选项的图像解码
.decodingOptions(new BitmapFactory.Options())
// 设置自定义显示器,这里是设置图片为圆形
// 默认为DefaultConfigurationFactory.createBitmapDisplayer()
//.displayer(new CircleBitmapDisplayer(Color.GREEN, 5))//设置图片的显示形状的时候记得给图片设置具体的数值,可以是match_parent,但不能是warp_content
// 设置自定义的handler
// 默认为new Handler()
.handler(new Handler())
// 建立
.build();
return options;
}
}
网友评论