android 动画 图片 内存溢出,Android开发之大图片内存溢出优化

缩放加载加载大图片(使用大图片时可能出现的异常)

09-14 00:59:51.813: E/AndroidRuntime(2128): Caused by: java.lang.OutOfMemoryError

09-14 00:59:51.813: E/dalvikvm-heap(2128): Out of memory on a 30720012-byte allocation.

在Android下采用ARGB来表示颜色 每个像素占4byte

PS:

图片:2400*3200

手机:320*480

宽缩放: 7

高缩放: 6

需要考虑的问题 :(1)动态获取图片的分辨率 (2)动态获取手机分辨率

实现步骤

(1)获取手机屏幕的宽和高

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

Display display = windowManager.getDefaultDisplay();

int screenWidth = display.getWidth();

int screenHeight = display.getHeight();

(2)获取图片的宽和高

//创建BitmapFactor的配置参数

BitmapFactory.Options options = new Options();

//设置options的inustDecodeBounds值为true

options.inJustDecodeBounds = true;

//此时BitmapFactory.decode方法并不会去真正加载图片,但是可以返回图片的一些信息(如宽和高)

BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher, options);

//根据options的配置信息获取图片的宽和高

int imgWidth = options.outWidth;

int imgHeight = options.outHeight;

(3)计算缩放比

int scale = 1;//默认的缩放比

int scaleX = imgWidth/screenWidth;//图片宽的缩放比

int scaleY = imgHeight/screenHeight;//图片高的缩放比

if(scaleX>scaleY && scaleX>scale){

//当宽的缩放比大于高的缩放比,并且缩放比大于默认缩放比时,将宽的缩放比赋给默认缩放比

scale = scaleX;

}else if(scaleY>scaleX && scaleY>scale){

scale = scaleY;

}

(4)按照缩放比显示图片

//options.inSampleSize = scale;//根据inSampleSize(采样率)来进行缩放,当inSampleSize为2时,图片缩放为原图大小的1/4;

//设置options.inJustDecodeBounds值为false,即开始真正加载图片

options.inJustDecodeBounds = false;

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher, options);

iv.setImageBitmap(bitmap);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值