对于Android中的异步加载图片,自己总结了两种方式,如下:

1、

/**  * 异步读取图片,需要传递三个参数:Imageview imageView,String imagePath,int maxNumpixels   * @author Bryant  */  public class AsyncLoadImage extends AsyncTask<Object, Object, Void> {      @Override      protected Void doInBackground(Object... params) {          try {              ImageView imageView=(ImageView) params[0];              String path=(String) params[1];              int maxNumOfPixels = (Integer)params[2];                        Bitmap bm = CompressPicture.compress(path,maxNumOfPixels);               publishProgress(new Object[] {imageView, bm});          }catch (Exception e) {              e.printStackTrace();          }                  return null;    }      protected void onProgressUpdate(Object... progress) {          ImageView imageView = (ImageView) progress[0];          Bitmap bm = (Bitmap) progress[1];        if(bm != null){            imageView.setImageBitmap(bm);         }    }  }  

2、

/** * 图片异步加载 * @author Bryant * */public class AsyncImageLoader {private Map<String, SoftReference<Bitmap>> imageCache=new HashMap<String, SoftReference<Bitmap>>();private int maxNumPixels;public Bitmap loadBitmap(final String imagePath,int maxNumPixels,final ImageCallback callback){this.maxNumPixels = maxNumPixels;if(imageCache.containsKey(imagePath)){SoftReference<Bitmap> softReference=imageCache.get(imagePath);if(softReference.get()!=null){return softReference.get();}}final Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {callback.imageLoaded((Bitmap) msg.obj, imagePath);}};new Thread(){public void run() {Bitmap bitmap=loadImageFromPath(imagePath);imageCache.put(imagePath, new SoftReference<Bitmap>(bitmap));handler.sendMessage(handler.obtainMessage(0,bitmap));};}.start();return null;}protected Bitmap loadImageFromPath(String imagePath) {try {return CompressPicture.compress(imagePath, maxNumPixels);} catch (Exception e) {throw new RuntimeException(e);}}public interface ImageCallback{public void imageLoaded(Bitmap imageBitmap,String imagePath);}}

经过实际使用,AsyncImageLoader的效率比较高,但是调用比较麻烦。

调用示例:

private AsyncImageLoader imageLoader = new AsyncImageLoader();imageLoader.loadBitmap(imagePath,maxNumPixels, new ImageCallback() {public void imageLoaded(Bitmap imageBitmap, String imagePath) {imageView.setImageBitmap(imageBitmap);}}); 

AsyncLoadImage调用较简单,调用示例如下:

new AsyncLoadImage().execute(new Object[]{imageView,imagePath,maxNumPixels});

更多相关文章

  1. Android对图片局部扩大的实现
  2. android map api v2 示例 步骤及问题
  3. Android 通知的基本用法示例代码
  4. Android的AnimationSet动画实现图片的轮播,移动和切换可以自定义
  5. Android进度条、自动提示框、下拉框动态数据加载
  6. Android 软件运行前加载图片

随机推荐

  1. android背景选择器selected
  2. Android(安卓)Sample NotePad学习一
  3. Android中自定义带图标和清空内容按钮的E
  4. Android(安卓)Studio中获取MD5、SHA1、SH
  5. 下载各个版本SDK Tools及ADT的技巧
  6. Android(安卓)之Google认证GMS详细解剖
  7. Android(安卓)开机自启动应用
  8. 2011.09.15 ——— android 桌面添加快捷
  9. 新浪微博Android客户端学习记录四:完成OAu
  10. Android(安卓)亲测源码分享