ImageLoader使用
第一步: 初始化的配置
实现自定义的MyApplication类,并初始化ImageLoader
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .discCacheFileNameGenerator(new Md5FileNameGenerator()) .tasksProcessingOrder(QueueProcessingType.LIFO) .enableLogging() // Not necessary in common .build(); // //全局初始化 ,默认的配置 ,也可以使用默认的配置 // ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context)); ImageLoader.getInstance().init(config); // 1 . 初始化配置信息 } }
第二步 : 设置图片的显示类型 DisplayImageOptions
在要显示图片的时候设置
DisplayImageOptions options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.ic_stub) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.drawable.ic_empty) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.drawable.ic_error) // 设置图片加载或解码过程中发生错误显示的图片 .cacheInMemory(true) // 设置下载的图片是否缓存在内存中 .cacheOnDisc(true) // 设置下载的图片是否缓存在SD卡中 .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 .build(); // 创建配置过得DisplayImageOption对象
第三步 : 使用
/** * 显示图片 * 参数1:图片url * 参数2:显示图片的控件 * 参数3:显示图片的设置 * */ // 第一种: ImageLoader.getInstance().displayImage(url, holder.image, options); //第二种 四个参数 /** * * 参数1:图片url * 参数2:显示图片的控件 * 参数3:显示图片的设置 * 参数4:监听器 */ ImageLoader.getInstance().displayImage(images[position], imageView, options, new SimpleImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { // 加载时候 spinner.setVisibility(View.VISIBLE); //显示进度条 } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { String message = null; switch (failReason.getType()) { // 获取图片失败类型 case IO_ERROR: // 文件I/O错误 message = "Input/Output error"; break; case DECODING_ERROR: // 解码错误 message = "Image can't be decoded"; break; case NETWORK_DENIED: // 网络延迟 message = "Downloads are denied"; break; case OUT_OF_MEMORY: // 内存不足 message = "Out Of Memory error"; break; case UNKNOWN: // 原因不明 message = "Unknown error"; break; } Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show(); spinner.setVisibility(View.GONE); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // spinner.setVisibility(View.GONE); // 不显示圆形进度条 } });
其他的一些配置 :设置滑动时候不加载图片
// 设置滑动不加载 pauseOnScroll(滑动不加载) 传 true pauseOnScroll(猛划不加载) 传true listView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), pauseOnScroll, pauseOnScroll)); gridView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), pauseOnScroll, pauseOnFling));
OutOfMemoryError 解决方法
减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5 在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888,使用RGB_565会比使用ARGB_8888少消耗2倍的内存 在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存 在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
本地图片的使用 , 转换成url
//图片来源于Content provider String contentprividerUrl = "content://media/external/audio/albumart/13"; //图片来源于assets String assetsUrl = Scheme.ASSETS.wrap("image.png"); //图片来源于 String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image");
附录 :
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />