Android自助餐之大圖片載入
阿新 • • 發佈:2018-12-05
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
完整程式碼
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();
}