Android BitmapFactory.Options 对图片进行缩放以符合ImageView大小

首先 图片的选取

icon应该是png

view pager、recycler view中的图应该是jpg


其次让图片的尺寸缩放成ImageView的尺寸,实现资源的节约

1.

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
 
BitmapFactory.decodeResource(context.getResources(), resId, options);

这样做会仅仅加载图片的宽高到内存中

2.

int inSampleSize = 1;

int width = options.outWidth;
int height = options.outHeight;

if (width > wantWidth || height > wantHeight) {
    int halfWidth = width / 2;
    int halfHeight = height / 2;
    while (halfWidth / inSampleSize >= wantWidth && halfHeight / inSampleSize >= wantHeight) {
        inSampleSize *= 2;
    }
}
宽高就被保存在了options.outWidth;options.outHeight;里。我们再根据image view的宽高计算出缩放比例

3.

options.inSampleSize = inSampleSize;
options.inJustDecodeBounds = false;

缩放比例赋给inSampleSize

然后inJustDecodeBounds代表实际加载

这样一来 就会加载出一个 缩放后的bitmap到内存中


方法如下 

public class BitmapUtils {
    public static Bitmap getGoodBitmap(Context context, int resId, int wantWidth, int wantHeight) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(context.getResources(), resId, options);

        int inSampleSize = 1;

        int width = options.outWidth;
        int height = options.outHeight;

        if (width > wantWidth || height > wantHeight) {
            int halfWidth = width / 2;
            int halfHeight = height / 2;
            while (halfWidth / inSampleSize >= wantWidth && halfHeight / inSampleSize >= wantHeight) {
                inSampleSize *= 2;
            }
        }

        options.inSampleSize = inSampleSize;
        options.inJustDecodeBounds = false;

        return BitmapFactory.decodeResource(context.getResources(),resId,options);
    }
}

注意 你传入的参数,应该是你经过测绘出的get width、get height,这样获取出来的才是px(像素)。布局文件中指定的是dp,在不同的手机上会进行不同的换算,不能作为参考的标准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值