A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张然龙 金牌黑马   /  2014-7-30 11:36  /  1171 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文





1. [代码]AsyncImageLoader.java
  1. package cn.com.mzba.service;

  2. import java.io.InputStream;
  3. import java.lang.ref.SoftReference;
  4. import java.net.URL;
  5. import java.util.HashMap;

  6. import android.graphics.drawable.Drawable;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.widget.ImageView;
  10. /**
  11. * 实现图片的异步载入显示
  12. * @author kandanle
  13. *
  14. */
  15. public class AsyncImageLoader {

  16.     /**
  17.      * 软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。软引用对象最常用于实现内存敏感的缓存。
  18.      */
  19.     private HashMap<String, SoftReference<Drawable>> imageCache;
  20.    
  21.     public AsyncImageLoader(){
  22.         imageCache = new HashMap<String, SoftReference<Drawable>>();
  23.     }
  24.    
  25.     public Drawable loadDrawable(final String imageUrl,final ImageView imageView,final ImageCallback imagecallback){
  26.         if(imageCache.containsKey(imageUrl)){
  27.             //从缓存中读取人人
  28.             SoftReference<Drawable> softReference = imageCache.get(imageUrl);
  29.             Drawable drawable = softReference.get();
  30.             if(drawable != null){
  31.                 return drawable;
  32.             }
  33.         }
  34.         final Handler handler = new Handler(){
  35.             @Override
  36.             public void handleMessage(Message msg) {
  37.                 super.handleMessage(msg);
  38.                 imagecallback.imageLoaded((Drawable)msg.obj, imageView, imageUrl);
  39.             }
  40.         };
  41.         new Thread(){
  42.             public void run() {
  43.                 Drawable drawable = loadImageFromUrl(imageUrl);
  44.                 imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
  45.                 Message message = handler.obtainMessage(0, drawable);
  46.                 handler.sendMessage(message);
  47.             }
  48.         }.start();
  49.         
  50.         return null;
  51.     }
  52.    
  53.     public static Drawable loadImageFromUrl(String urlPath){
  54.         URL url;
  55.         InputStream is = null;
  56.         try{
  57.             url = new URL(urlPath);
  58.             is = (InputStream)url.getContent();
  59.         }catch(Exception e){
  60.             e.printStackTrace();
  61.         }
  62.         Drawable drawable = Drawable.createFromStream(is, "src");
  63.         return drawable;
  64.     }
  65.    
  66. }
复制代码




2. [代码]ImageCallback.java
  1. package cn.com.mzba.service;

  2. import android.graphics.drawable.Drawable;
  3. import android.widget.ImageView;

  4. public interface ImageCallback {
  5.     public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl);
  6. }

  7. Drawable drawable = asyncImageLoader.loadDrawable(weiboInfo.getUserIcon(), viewUserIcon, new ImageCallback() {
  8.     @Override
  9.     public void imageLoaded(Drawable imageDrawable, ImageView imageView,String imageUrl) {
  10.     imageView.setImageDrawable(imageDrawable);
  11.         }
  12. });
  13. if(drawable == null){
  14.     viewUserIcon.setImageResource(R.drawable.portrait);
  15. }else{
  16.     viewUserIcon.setImageDrawable(drawable);
  17. }
复制代码





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马