android 异步加载图片详解编程语言

AsyncImageLoader.java

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; 
    } 
 
}

ImageCallback.java

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); 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10344.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论