Android 图片如何高效加载与缓存 (4.5) —— 缩略图生成的优化

在之前那篇里面仍有不足之处,比如:

一张4000*3000的图片压缩到了300*200的大小,然后输出到ImageView上。但是ImageView的大小可能只有100*100,这样我们仍然占用了很多不需要的内存。所以我们只需要将图片居中裁剪成ImageView的大小即可。

知道了如何做之后,在考虑一下可能存在的图片尺寸与ImageView尺寸之间的关系:

1.图片的宽 小于 ImageView的宽 (比如:5000*10)
2.图片的高 小于 ImageView的高 (比如:10*5000)
3.图片的宽和高都 小于 ImageView的宽高 (比如:1*1)

考虑好了之后,我们就能动手写代码了!

先来个大合照,然后我在把裁剪的方法一一拿出来说吧 = n =

    /*
    获取图片缩略图任务
     */
    private class GenerateImageThumbnail implements Callable<String>{
   

        private int scaleTimes;  //缩放倍数
        private String path;  //图片路径
        private String tag;  //图片加载任务唯一TAG
        private ImageView imageView;  //图片接收的ImageView
        private Bitmap bitmap;  //图片的Bitmap对象
        private HandleOnLoaded handleOnLoaded;  //图片效果处理回调

        public GenerateImageThumbnail(String path, String tag, ImageView imageView, HandleOnLoaded handleOnLoaded) {
            this.path = path;
            this.tag = tag;
            this.imageView = imageView;
            this.handleOnLoaded = handleOnLoaded;
        }

        @Override
        public String call() throws Exception {

            try {
                //进行图片剪裁
                bitmap = cropBitmap();
            } catch (IllegalArgumentException e) {
                //如果裁剪出现了异常
                fetherExecutor.removeTag(tag);
                Log.d("OCImageLoader", "Exception on croping bitmap. "+e);
                runOnUIThread(new Runnable() {
                    @Override
                    public void run() {
                        onError();
                    }
                });
                return null;
            }

            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值