博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android异步加载图片
阅读量:5963 次
发布时间:2019-06-19

本文共 2633 字,大约阅读时间需要 8 分钟。

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

1.

/* * 异步读取图片,需要传递三个参数:Imageview imageView,String imagePath,int maxNumpixels * @author Bryant / public class AsyncLoadImage extends AsyncTask
{
@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);     }}

}

/** * 图片异步加载 * @author Bryant * */public class AsyncImageLoader {    private Map> imageCache=new HashMap>();    private int maxNumPixels;        public Bitmap loadBitmap(final String imagePath,int maxNumPixels,final ImageCallback callback){        this.maxNumPixels = maxNumPixels;                if(imageCache.containsKey(imagePath)){            SoftReference softReference=imageCache.get(imagePath);            if(softReference.get()!=null){                return softReference.get();            }        }        final Handler handler=new Handler(){            @Override            public 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));                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});
原文出处:后端技术杂谈
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。
你可能感兴趣的文章
mysql 并行复制
查看>>
傲不可长,欲不可纵,乐不可极,志不可满——提高个人修养
查看>>
linux系统增加swap容量的方法
查看>>
后台调用gps
查看>>
HTML5标签的语义认知和理解(1)
查看>>
MySQL日志功能详解(2)
查看>>
HP LaserJet 305X 和 339X 系列一体机如何设置手动或自动接收传真?
查看>>
linux之权限之隐藏权限
查看>>
系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常...
查看>>
XDCTF成长记录
查看>>
registered the JDBC driver [com.mysql.jdbc.Driver]
查看>>
Linux系统中的文本处理工具
查看>>
IDE---Python IDE之Eric5在window下的安装
查看>>
python---LineReceiver实现记录服务器
查看>>
Mybatis调用Oracle中的存储过程和function
查看>>
telnet :No route to host
查看>>
基本安装lnmp环境
查看>>
yum源资料汇总
查看>>
7、MTC与MTV,http请求介绍
查看>>
logstash消费阿里云kafka消息
查看>>