android异步加载图片
16lz
2021-12-04
阅读更多
package cn.com.mzba.service;import java.io.InputStream;import java.lang.ref.SoftReference;import java.net.URL;import java.util.HashMap;import android.graphics.drawable.Drawable;import android.os.Handler;import android.os.Message;import android.widget.ImageView;/** * 实现图片的异步载入显示 * @author kandanle * */public class AsyncImageLoader {/** * 软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。软引用对象最常用于实现内存敏感的缓存。 */private HashMap> imageCache;public AsyncImageLoader(){imageCache = new HashMap >();}public Drawable loadDrawable(final String imageUrl,final ImageView imageView,final ImageCallback imagecallback){if(imageCache.containsKey(imageUrl)){//从缓存中读取SoftReference softReference = imageCache.get(imageUrl);Drawable drawable = softReference.get();if(drawable != null){return drawable;}}final Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);imagecallback.imageLoaded((Drawable)msg.obj, imageView, imageUrl);}};new Thread(){public void run() {Drawable drawable = loadImageFromUrl(imageUrl);imageCache.put(imageUrl, new SoftReference (drawable));Message message = handler.obtainMessage(0, drawable);handler.sendMessage(message);}}.start();return null;}public static Drawable loadImageFromUrl(String urlPath){URL url;InputStream is = null;try{url = new URL(urlPath);is = (InputStream)url.getContent();}catch(Exception e){e.printStackTrace();}Drawable drawable = Drawable.createFromStream(is, "src");return drawable;}}
package cn.com.mzba.service;import android.graphics.drawable.Drawable;import android.widget.ImageView;public interface ImageCallback { public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl);}
使用例子:
Drawable drawable = asyncImageLoader.loadDrawable(weiboInfo.getUserIcon(), viewUserIcon, new ImageCallback() {@Overridepublic void imageLoaded(Drawable imageDrawable, ImageView imageView,String imageUrl) {imageView.setImageDrawable(imageDrawable); }});if(drawable == null){viewUserIcon.setImageResource(R.drawable.portrait);}else{viewUserIcon.setImageDrawable(drawable);}
更多相关文章
- 类和 Json对象
- android之网络请求框架OKhttp、原生http请求
- android TabHost 对象报错
- Android(安卓)中 上下文Context理解
- Android(安卓)Gson类型转换错误解决 com.google.gson.internal.L
- android SDK 源码 -----建造这模式(生成器模式)
- Android(安卓)wifi的WifiInfo对象详解
- android htttp网络通信
- Android(安卓)系统图标