android异步加载图片

 

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<String, SoftReference<Drawable>> imageCache;
	
	public AsyncImageLoader(){
		imageCache = new HashMap<String, SoftReference<Drawable>>();
	}
	
	public Drawable loadDrawable(final String imageUrl,final ImageView imageView,final ImageCallback imagecallback){
		if(imageCache.containsKey(imageUrl)){
			//从缓存中读取
			SoftReference<Drawable> softReference = imageCache.get(imageUrl);
			Drawable drawable = softReference.get();
			if(drawable != null){
				return drawable;
			}
		}
		final Handler handler = new Handler(){
			@Override
			public 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>(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() {
	@Override
	public void imageLoaded(Drawable imageDrawable, ImageView imageView,String imageUrl) {
	imageView.setImageDrawable(imageDrawable);
        }
});
if(drawable == null){
	viewUserIcon.setImageResource(R.drawable.portrait);
}else{
	viewUserIcon.setImageDrawable(drawable);
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值