概述
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();
- 获取Window尺寸
根据目标尺寸生成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();
}
最后
以上就是陶醉睫毛为你收集整理的Android自助餐之大图片加载Android自助餐之大图片加载的全部内容,希望文章能够帮你解决Android自助餐之大图片加载Android自助餐之大图片加载所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复