通过使用Universal-Image-Loader实现图片异步加载,现在这个比较主流。
下面是转载地址:https://github.com/nostra13/Android-Universal-Image-Loader
Universal-Image-Loader
在图片加载中,主要用到下面的类(两个类使用其中一个),下面写一下这两个类中主要的一些方法,在正式写项目中不需要把我说的这些方法都用上。
其中一个类是:
DisplayImageOptions
这个类中的主要方法有:
- DisplayImageOptions options = new DisplayImageOptions.Builder()
- .showImageOnLoading(R.drawable.ic_stub) // 设置正在加载的图片资源
- .showImageForEmptyUri(R.drawable.ic_empty) // 设置图上资源为空时加载的图片资源
- .showImageOnFail(R.drawable.ic_error) // 设置加载失败的图片资源
- .resetViewBeforeLoading(false) // 设置图片在下载前是否重置
- .delayBeforeLoading(1000)//设置延时多少时间后开始下载
- .cacheInMemory(false) // 设置下载的资源是否缓存在内存中
- .cacheOnDisk(false) // 设置下载的资源是否缓存在SD卡中
- .preProcessor(...) // 设置图片加入缓存前,对bitmap进行设置
- .postProcessor(...) // 设置显示前的图片,显示后这个图片一直保留在缓存中
- .extraForDownloader(...) // 设置额外的内容给ImageDownloader
- .considerExifParams(false) // 是否考虑JPEG图像EXIF参数(旋转,翻转)
- .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // 设置图片以何种编码方式显示
- .bitmapConfig(Bitmap.Config.ARGB_8888) // 设置图片的解码类型
- .decodingOptions(...) // 设置图片的解码配置
- 例如 android.graphics.BitmapFactory.Options decodingOptions
- .displayer(new SimpleBitmapDisplayer()) // 设置显示方式(样式或者动画等)
- 例如:RoundedBitmapDisplayer(int roundPixels)设置圆角图片
- FakeBitmapDisplayer()这个类什么都没做
- RoundedBitmapDisplayer(int radian) 设置为圆角,弧度为多少
- FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
- SimpleBitmapDisplayer()正常显示一张图片
- .handler(new Handler()) // Handler事件
- .build();
另一个类是
ImageLoaderConfiguration
这个类中的主要方法有:
- File cacheDir = StorageUtils.getCacheDirectory(context);
- ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
- .memoryCacheExtraOptions(maxWidth, maxHeight) // 缓存图片的最大宽度,最大高度,
- .diskCacheExtraOptions(480, 800, null)
- .taskExecutor(...) // 添加线程池,进行下载,如果进行了这个设置,
- 那么threadPoolSize(int),threadPriority(int),
- tasksProcessingOrder(QueueProcessingType)将不会起作用
- .taskExecutorForCachedImages(...)// 下载缓存图片
- .threadPoolSize(3) // 设置用于显示图片的线程池大小
- .threadPriority(Thread.NORM_PRIORITY - 1) // 设置线程的优先级
- .tasksProcessingOrder(QueueProcessingType.FIFO) // 设置图片加载和显示队列处理的类型
- // 默认为QueueProcessingType.FIFO
- // 注:如果设置了taskExecutor或者
- taskExecutorForCachedImages 此设置无效
- .denyCacheImageMultipleSizesInMemory() // 设置是否允许在内存中缓存多个图片大小
- 默认为允许,(同一个图片URL)根据不同大小
- 的imageview保存不同大小图片
- .memoryCache(new LruMemoryCache(2 * 1024 * 1024))// 设置内存缓存
- 默认为一个当前应用可用内存的1/8大小的
- .memoryCacheSize(2 * 1024 * 1024)// 设置SD缓存的最大大小 默认为一个当前应用可用内存的1/8
- .memoryCacheSizePercentage(13) // 设置内存缓存最大大小占当前应用可用内存的百分比
- 默认为一个当前应用可用内存的1/8
- .diskCache(new UnlimitedDiscCache(cacheDir)) // default
- .diskCacheSize(50 * 1024 * 1024)
- .diskCacheFileCount(100)
- .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
- .imageDownloader(new BaseImageDownloader(context)) // 设置图片下载器
- .imageDecoder(new BaseImageDecoder()) // 设置图片解码器
- .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // 设置默认的图片显示选项
- .writeDebugLogs() // 打印DebugLogs
- .build();
这里有篇详细介绍的文章比较好:
Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
还有一个应用 Demo的文章: