ImageLoader用法详解
来源:互联网 发布:java 腾讯地图api接口 编辑:程序博客网 时间:2024/06/15 19:43
ImageLoader是一个加载图片的开源框架,其基本功能为加载本地和网络图片。
github地址:https://github.com/nostra13/Android-Universal-Image-Loader
首先看一个封装好的工具方法:
该工具方法中包含了几乎ImageLoader的常用方法,包括初始化、网络图片的加载、图片处理(圆形、圆角)、清除缓存等等
public class MyImageLoader {private static final int MEMORY_CACHE_SIZE = 2 * 1024;private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024;/** * 加载网络图片,不处理 */private static final DisplayImageOptions OPTIONS_NORMAL = new DisplayImageOptions.Builder().cacheOnDisk(true).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Bitmap.Config.RGB_565).considerExifParams(true).build();/** * 加载本地图片,不缓存,不存储 */private static final DisplayImageOptions PHOTO_SELECT = new DisplayImageOptions.Builder().cacheOnDisk(false).cacheInMemory(false).imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Bitmap.Config.RGB_565).considerExifParams(true).build();/** * 加载圆形图片,圆形边框为白色,边框宽度为5 */private static final DisplayImageOptions OPTIONS_CIRCLE = new DisplayImageOptions.Builder().cacheOnDisk(true).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Bitmap.Config.RGB_565).displayer(new CircleBitmapDisplayer(Color.WHITE, 5)).considerExifParams(true).build();/** * 加载圆角图片,圆角弧度为8 */private static final DisplayImageOptions OPTIONS_ROUND_RADIUS = new DisplayImageOptions.Builder().cacheOnDisk(true).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY).bitmapConfig(Bitmap.Config.RGB_565).displayer(new RoundedBitmapDisplayer(8)).considerExifParams(true).build();private static ImageLoader instance;/** * 获取缓存的图片路径 * * @return */public static ImageLoader getImageLoader() {if (instance == null) {init(MyApplication.GetApplication());}return instance;}private static void init(Context appContext) {ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(appContext).threadPoolSize(3).threadPriority(Thread.NORM_PRIORITY - 2).tasksProcessingOrder(QueueProcessingType.LIFO).denyCacheImageMultipleSizesInMemory().imageDownloader(new BaseImageDownloader(appContext, 10000, 10000)).diskCacheFileNameGenerator(new Md5FileNameGenerator()).diskCacheSize(DISK_CACHE_SIZE).memoryCache(new WeakMemoryCache()).memoryCacheSize(MEMORY_CACHE_SIZE).build();ImageLoader.getInstance().init(config);instance = ImageLoader.getInstance();}public static void display(String url, ImageView imageView, DisplayImageOptions options) {if (instance == null) {init(MyApplication.GetApplication());}instance.displayImage(url, imageView, options);}/** * 获取普通不处理图片 * * @param url * @param imageView */public static void displayNormal(String url, ImageView imageView) {display(url, imageView, OPTIONS_NORMAL);}/** * 获取相册照片 * * @param url * @param imageView */public static void displayPhoto(String url, ImageView imageView) {display(url, imageView, PHOTO_SELECT);}/** * 获取圆形图片 * * @param url * @param imageView */public static void displayCircle(String url, ImageView imageView) {display(url, imageView, OPTIONS_CIRCLE);}/** * 获取圆角图片 * * @param url * @param imageView */public static void displayRoundRadius(String url, ImageView imageView) {display(url, imageView, OPTIONS_ROUND_RADIUS);}/** * 清除缓存 */public static void clearCache() {if (instance != null) {instance.clearMemoryCache();instance.clearDiskCache();}}/** * 获取url缓存的本地图片路径 * * @return */public static File getImageLoaderFile(String url) {if (instance == null) {init(MyApplication.GetApplication());}File file = instance.getDiskCache().get(url);return file;}}
通过以上代码可以实现:
1、网络和本地图片的加载;
2、将加载的图片处理成圆形或者圆角
3、清除内存中的缓存
4、清除SD卡中的缓存
5、获取相应url的缓存路径
用法补充:
1、可以加载的图片的路径的写法:
"http://site.com/image.png" // from Web"file:///mnt/sdcard/image.png" // from SD card"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)"content://media/external/images/media/13" // from content provider"content://media/external/video/media/13" // from content provider (video thumbnail)"assets://image.png" // from assets"drawable://" + R.drawable.img // from drawables (non-9patch images)2、获取Bitmap
ImageLoader imageLoader = ImageLoader.getInstance(); // Get singleton instance
// Load image, decode it to Bitmap and return Bitmap synchronouslyBitmap bmp = imageLoader.loadImageSync(imageUri);
imageLoader.displayImage(imageUri, imageView, options, 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) { ... }});4、指定图片大小
// Load image, decode it to Bitmap and return Bitmap to callbackImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this sizeimageLoader.loadImage(imageUri, targetSize, options, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // Do whatever you want with Bitmap }});5、其他的一些方法可以通过类库中的代码获取,比如通过DiskCache可以知道通过url调用remove方法直接删除缓存在SD卡的图片,如图
6、若想要定制更多的图片样式可以通过继承BitmapDisplayer做到,类库中本身也是这么做的,如图是类库自己定制的圆形图片的类,通过重写其中的方法即可实现
7、通过可定制的方式,可以使用第三方的网络请求框架,比如github中sample中给出的使用Okhttp的网络请求,代码如下:
public class OkHttpImageDownloader extends BaseImageDownloader {private OkHttpClient client;public OkHttpImageDownloader(Context context, OkHttpClient client) {super(context);this.client = client;}@Overrideprotected InputStream getStreamFromNetwork(String imageUri, Object extra) throws IOException {Request request = new Request.Builder().url(imageUri).build();ResponseBody responseBody = client.newCall(request).execute().body();InputStream inputStream = responseBody.byteStream();int contentLength = (int) responseBody.contentLength();return new ContentLengthInputStream(inputStream, contentLength);}}
以上就是ImageLoader的用法,欢迎补充。
2 0
- ImageLoader用法详解
- imageloader用法
- ImageLoader用法
- ImageLoader详解
- imageloader详解
- imageloader详解
- ImageLoader 详解
- Android图片加载库—Universal-ImageLoader用法详解
- ImageLoader的用法
- Android ImageLoader用法总结
- ImageLoader的用法
- ImageLoader的用法
- ImageLoader的用法
- ImageLoader用法 图片加载
- ImageLoader用法总结
- Volley的ImageLoader用法
- ImageLoader的简单用法
- ImageLoader配置详解
- Nginx下使Thinkphp URL模式支持PATHINFO和REWRITE
- java发送http的get、post请求
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- layout_gravity和gravity区别
- Golang资料集
- ImageLoader用法详解
- Python无法连接mongodb数据库,Connection方法不存在
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- 最全的Android源码目录结构详解
- TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)
- 38页上机练习2
- 关于系统运维监控的几点建议
- 理解jquery的$.extend()、$.fn和$.fn.extend()
- JavaSE--Collection 源码分析