Android开发ListView控件异步加载图片

写博客总是三天打鱼,,两天晒网....今天又来补补Android开发的内容

之前在完成ImageView浏览图片的时候,还有一块内容忘了总结了,就是ListView中显示缩略图时,异步加载图片的功能。

这个功能应用在网络上获取图片时比较多。我是在打开预览图片界面的时候,发现图片很多的情况下打开很慢,,由于我压缩bitmap的效率比较低..所以我在这里另外开了一个线程来获得listview中的bitmap,这样打开界面就很快了。

这里使用的是AsyncTask类,可以直接操作控件

需要重写两个函数,如下

doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。

onPostExecute(Result)  相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回

所以我们就在doInBackground函数中通过图片文件名得到Bitmap对象,然后在onPostExecute中将bitmap显示在ImageVIew中。。。就ok~

  1. public class BmpAsyncTask extends AsyncTask<String, Void, Bitmap> {  
  2.   
  3.         private final WeakReference<ImageView> imageViewReference;  
  4.         private String data = "";  
  5.         private ImageView mImgView;  
  6.         private List<Bitmap> mListBmp;  
  7.   
  8.         public BmpAsyncTask(ImageView imageView, List<Bitmap> listBmp) {  
  9.             imageViewReference = new WeakReference<ImageView>(imageView);  
  10.             mImgView = imageView;  
  11.             mListBmp = listBmp;  
  12.         }  
  13.   
  14.         @Override  
  15.         protected Bitmap doInBackground(String... params) {  
  16.             data = params[0];  
  17.             File file = new File(data);  
  18.             Bitmap bmp = null;  
  19.             // System.out.println("data:"+data);  
  20.             if (data.endsWith(".jpg") || data.endsWith(".png")) {  
  21.                 bmp = PublicMethod.getBitmapFromFile(file, mImgView.getWidth(),  
  22.                         mImgView.getWidth());  
  23.             } else if (data.endsWith(".mp4")) {  
  24.                 bmp = ThumbnailUtils.createVideoThumbnail(data,  
  25.                         MediaStore.Images.Thumbnails.MINI_KIND);  
  26.             }  
  27.             // bmp=ThumbnailUtils.extractThumbnail(bmp, 100, 100,  
  28.             // ThumbnailUtils.OPTIONS_RECYCLE_INPUT);  
  29.             mListBmp.add(bmp);  
  30.             return bmp;  
  31.         }  
  32.   
  33.         @Override  
  34.         protected void onPostExecute(Bitmap bitmap) {  
  35.             if (imageViewReference != null && bitmap != null) {  
  36.                 final ImageView imageView = imageViewReference.get();  
  37.                 if (imageView != null) {  
  38.                     imageView.setImageBitmap(bitmap);  
  39.                 }  
  40.             }  
  41.         }  
  42.     }  

调用上述线程只要通过构造函数和execute方法传入参数即可。

  1. BmpAsyncTask bmpTask = new BmpAsyncTask(imgView, m_listBmp);  
  2. bmpTask.execute(file.getAbsolutePath()); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值