通常在学习时我们都是直接把图片放入控件的,就像下面那样。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.demo);
ImageView imageView =findViewById(R.id.result_image);
imageView.setImageBitmap(bitmap);
可是图片过大的情况下程序就会崩溃,这时我们可以考虑按采样率来设置图片。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; //采样率 返回图片的几分之一,取值越大越模糊
//demo为测试的大图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.demo,options);
imageView.setImageBitmap(bitmap);
但是,以固定的采样率来操作图片可能在面对不同大图时都要修改就会很麻烦,所以我们可以通过比例计算的方式来决定采样率。
public static int calculateInSampleSize(BitmapFactory.Options options, int maxWidth, int maxHeight) {
//此方法的参数为options,控件的宽,控件的高
//这里其实是获取到默认的高度和宽度,也就是图片的实际高度和宽度
final int height = options.outHeight;
final int width = options.outWidth;
//默认采样率为1,也就是不变。
int inSampleSize = 1;
//
if (width > maxWidth || height > maxHeight) {
//判断图片的方向
if (width > height) {
inSampleSize = Math.round((float) height / (float) maxHeight);
} else {
inSampleSize = Math.round((float) width / (float) maxWidth);
}
final float totalPixels = width * height;
final float maxTotalPixels = maxWidth * maxHeight * 2;
while (totalPixels / (inSampleSize * inSampleSize) > maxTotalPixels) {
inSampleSize++;
}
}
//
return inSampleSize;
//返回一个inSampleSize,可以用options.inSampleSize来接收就可以动态设置采样率
}
当然,若使用picasso/glide会比较简单
只需要加个依赖
implementation 'com.github.bumptech.glide:glide:3.7.0'
就可以以一行代码实现
//上下文 图片 放置位置
Glide.with(WeatherActivity.this).load(bingPic).into(bingPicImg);
代码部分来自