Android加载大图片APP

加载大图片

其中借鉴了一些郭霖大牛博客上的知识

导言

最近在面试实习,已经写了好几个面试app了,但是一直没时间将其写成博客上传到博客上!今天我就上传一个,等我得到实习offer了,我将所有我写的实习面试题app都写成博客,上传到博客上,大家可以借鉴借鉴,也随便了解一下Android面试实习生的实习题

技术难题

相信大家平时在写一个APP在加载大图片的时候,图片的分辨率会比我们手机屏幕的分辨率高得多,经常出现OutOfMemory异常,如果你没出现这样异常的图片,说明你加载的图片还不够大!给你个图片的链接,你将其加载在你的app中,你看看是否报错?

我们在其中需要用到BitmapFactory类的Options,你需要使用BitmapFactory中SD卡中的图片可以使用decodeFile方法,网络上的图片可以使用decodeStream方法,资源文件中的图片可以使用decodeResource方法进行解析,先开始将options的inJustDecodeBounds的属性设置为true,这样你就可以让解析方法禁止为bitmap分配内存,返回值也不再是一个Bitmap对象,而是null。虽然Bitmap是null了,但是BitmapFactory.Options的outWidth、outHeight和outMimeType属性都会被赋值,通过outWidth和outHeight我们就知道了图片的大小,是否符合我们手机的分辨率的大小!

这里写图片描述

获取手机的屏幕大小,Display类中获取屏幕的大小getWidth()和getHeight()已经过时,今天讲个新的获取屏幕大小的方式,就是通过下图中的Point类来获取,getRealSize()与getSize()的区别,前者是准确获取到分辨率的大小,后者则不是那么准确了,不过其中还要涉及到api的版本,因为只有17以上才能用getRealSize(),否则不能,那只能将就用getSize()了,我们就不用那些过时的方法了,毕竟看到自己代码中调用了有一杠划掉的函数,还是很不舒服!

这里写图片描述

然后比较图片与屏幕分辨率的大小关系,比如我们有一张2048*1536像素的图片,将inSampleSize的值设置为4,就可以把这张图片压缩成512*384像素。原本加载这张图片需要占用12M的内存,压缩后就只需要占用0.75M了,(假设图片是ARGB_8888类型,即每个像素点占用4byte(1Byte = 8bit;1KB = 1024Bytes;1MB = 1024KB;1GB=1024MB)),我提供那张图在内存中就需要3.72G内存,所以容易出现OutOfMemory异常,我这让其显示,我选择的是高、宽比例较小的那个,因为hr出题说要滑动显示全图,所以我要让其显示不全,这样我就可以滑动了,如果你们要显示全的话,那就选着高、宽比例较大的那个

这里写图片描述

github源码

这源码中还有自定义的双击事件、线程加载图片等功能!大家可以借鉴借鉴,借鉴了记得给我颗github星,毕竟我在找实习的百忙时期还来写博客,现在培训公司培训太多的Android培训生,大多数公司都想找有经验的Android开发师,所以我们想找实习的就成炮灰了,给点心理安慰!谢谢O(∩_∩)O谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值