您的位置:首页 > 移动开发 > Android开发

Android自助餐之大图片加载

2016-07-11 19:26 337 查看

Android自助餐之大图片加载

原理

使用
BitmapFactory.decodeStreeam()
方法,该方法会调用native层代码来创建bitmap(两个重载都会调用)

使用带
BitmapFactory.Options
参数的方法,改参数可指定生成bitmap的大小

思路

根据View尺寸或Window尺寸来确定bitmap的尺寸

将确定好的尺寸放入
BitmapFactory.Options


调用
BitmapFactory.decodeStreeam()
生成bitmap

步骤

根据图片路径或URI打开输入流

InputStream is = getContentResolver().openInputStream(imageUri);


获取屏幕或View尺寸

如果能确定View尺寸则使用View尺寸,如果不能(比如动态调整的View、自适应的View等)则获取最接近该View的尺寸,实在不行就获取当前Activity的Window尺寸(比屏幕尺寸小)

获取Window尺寸

WindowManager windowManager = getWindowManager();

Display defaultDisplay = windowManager.getDefaultDisplay();

defaultDisplay.getHeight();

defaultDisplay.getWidth();


获取View尺寸

view.getMeasuredWidth();

view.getMeasuredHeight();


根据目标尺寸生成BitmapFactory.Options

BitmapFactory.Options option = new BitmapFactory.Options();
option.inSampleSize = dstSize;


使用options调用BitmapFactory.decodeStream()生成bitmap

Bitmap bitmap = BitmapFactory.decodeStream(is, null, option);


完整代码

InputStream is = null;
try {

int screenWidth=getWindowManager().getDefaultDisplay().getWidth();
int screenHeight=getWindowManager().getDefaultDisplay().getHeight();
int maxSize=Math.max(screenWidth,screenHeight);//以长边为准

is = getContentResolver().openInputStream(imageUri);
BitmapFactory.Options option = new BitmapFactory.Options();
option.inSampleSize = maxSize;
Bitmap bitmap = BitmapFactory.decodeStream(is, null, option);
imageView.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
try{
if(is!=null)is.close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: