时间:2021-05-20
本文实例讲述了Android编程图片加载类ImageLoader定义与用法。分享给大家供大家参考,具体如下:
解析:
1)图片加载使用单例模式,避免多次调用时产生死锁
2)核心对象 LruCache
图片加载时先判断缓存里是否有图片,如果有,就使用缓存里的
没有就加载网络的,然后置入缓存
3)使用了线程池ExecutorService mThreadPool技术
4)使用了Semaphore 信号来控制变量按照先后顺序执行,避免空指针的问题
如何使用:
在Adapter里加载图片时
复制代码 代码如下:ImageLoader.getInstance.loadImage("http://.android.news.util * @类名 ImageSizeUtil * @author chenlin * @date 2014-3-7 下午7:37:50 * @version 1.0 */public class ImageSizeUtil { /** * 根据需求的宽和高以及图片实际的宽和高计算SampleSize * * @param options * @param width * @param height * @return */ public static int caculateInSampleSize(Options options, int reqWidth, int reqHeight) { int width = options.outWidth; int height = options.outHeight; int inSampleSize = 1; if (width > reqWidth || height > reqHeight) { int widthRadio = Math.round(width * 1.0f / reqWidth); int heightRadio = Math.round(height * 1.0f / reqHeight); inSampleSize = Math.max(widthRadio, heightRadio); } return inSampleSize; } /** * 根据ImageView获适当的压缩的宽和高 * * @param imageView * @return */ public static ImageSize getImageViewSize(ImageView imageView) { ImageSize imageSize = new ImageSize(); DisplayMetrics displayMetrics = imageView.getContext().getResources().getDisplayMetrics(); LayoutParams lp = imageView.getLayoutParams(); int width = imageView.getWidth();// 获取imageview的实际宽度 if (lp != null) { if (width <= 0) { width = lp.width;// 获取imageview在layout中声明的宽度 } } if (width <= 0) { // width = imageView.getMaxWidth();// 检查最大值 width = getImageViewFieldValue(imageView, "mMaxWidth"); } if (width <= 0) { width = displayMetrics.widthPixels; } int height = imageView.getHeight();// 获取imageview的实际高度 if (lp != null) { if (height <= 0) { height = lp.height;// 获取imageview在layout中声明的宽度 } } if (height <= 0) { height = getImageViewFieldValue(imageView, "mMaxHeight");// 检查最大值 } if (height <= 0) { height = displayMetrics.heightPixels; } imageSize.width = width; imageSize.height = height; return imageSize; } public static class ImageSize { public int width; public int height; } /** * 通过反射获取imageview的某个属性值 * * @param object * @param fieldName * @return */ private static int getImageViewFieldValue(Object object, String fieldName) { int value = 0; try { Field field = ImageView.class.getDeclaredField(fieldName); field.setAccessible(true); int fieldValue = field.getInt(object); if (fieldValue > 0 && fieldValue < Integer.MAX_VALUE) { value = fieldValue; } } catch (Exception e) { } return value; }}
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Android编程学习之异步加载图片的方法。分享给大家供大家参考,具体如下:最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出。我
ImageSelector简介Android自定义相册,实现了拍照、图片选择(单选/多选)、ImageLoader无绑定任由开发者选择https://githu
本文实例分析了php中静态类与静态变量用法的区别。分享给大家供大家参考。具体分析如下:static是定义一个静态对象或静态变量,关于static定义的变量或类方
本文实例讲述了Android编程自定义线程池与用法。分享给大家供大家参考,具体如下:一、概述:1、因为线程池是固定不变的,所以使用了单例模式2、定义了两个线程池
本文实例讲述了Android开发之自定义View(视图)用法。分享给大家供大家参考,具体如下:View类是Android的一个超类,这个类几乎包含了所有的屏幕类