帶你走進Android之基礎篇Bitmap加載

NO IMAGE

嗨,你終於來啦~
等你好久啦~
從今天開始每天分享一篇Android需要了解的知識點,喜歡的小夥伴歡迎關注,我會定期分享Android知識點及解析,還會不斷更新的BATJ面試專題,歡迎大家前來探討交流,如有好的文章也歡迎投稿。

昨天貢獻一個解壓縮zip文件的工具,今天我們來講講bitmap加載~

Bitmap加載

通常來說在加載Bitmap的過程中導致OOM的原因是要加載的圖片太大,
但因為現在屏幕的尺寸都不大,就算是一個高分辨率的圖片,以小圖加載也就足夠了。
所以思路一般是,先獲取當前要顯示的ImageView區域大小,按大小縮放原圖然後加載。

獲取Bitmap大小

獲取Bitmap大小的過程不需要加載整張圖片,可以用 BitmapFactory.Options 來獲取。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decode***
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;

其中 decode方法有很多種,可以根據需要選擇不同的實現,比如 stream, file等,
重點是inJustDecodeBounds設置為 true 之後在解析的時候就不會加載到內存了,只獲取對應的寬和高。

按縮放率加載圖片

比方說要把一張 960960的圖放到9696的ImageView裡,很簡單我們應該縮放10倍,
縮放的過程可以用 inSampleSize 這個參數來控制;

public Bitmap getResizedBitmap(File bitmap, int sampleSize) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = sampleSize;
return BitmapFactory.decodeFile(bitmap, options);
}

在真正加載圖片的時候 inJustDecodeBounds這個參數需要設置為true,
此時將會真正的消耗內存。

上面這就是Android圖片加載的入門技巧了,也是個必備技巧,
在各種初級面試中都會問到,希望能幫到大家。

相關文章

ReactNative中的狀態欄

Android開發不得不收集的工具類集合

作為Android開發者你真的知道Android按下開機鍵到啟動發生什麼嗎?

想做架構師?你真的明白Android事件分發機制嗎?