天天看點

Android加載超大圖檔

Android加載超大圖檔

    • 一、目标
    • 二、體驗位址
    • 三、準備工作
      • 1. 加載超大圖檔
      • 2. 擷取圖檔大小
      • 3. 使用者互動
    • 四、subsampling-scale-image-view
    • 五、Final

一、目标

實作超大圖檔的檢視功能。

  • 《金剛經 右街僧 錄準公》26800 x 640(32.7M)
  • 《金剛經 王玠》15404 x 950(27.9M)
  • 《溪山清遠圖》17008 x 720 (23.4M)
    Android加載超大圖檔

二、體驗位址

神馬筆記最新版本:【神馬筆記Version1.1.0_beta.apk】

三、準備工作

1. 加載超大圖檔

2018年12月17日,華為在長沙召開新品釋出會,正式釋出旗下nova系列新機華為nova 4,主打極點全面屏及4800萬超高像素拍照體驗。

以RGB_565圖檔格式計算4800萬像素占用記憶體大小。

2 x 48 x 1000 x 1000 / 1024 / 1024 ≈ 91.55M

如果直接加載完整的圖檔,大概需要占用91.55M記憶體空間,對于當下記憶體配置都是6G起步的手機,占用内容不算大,但Android為每個應用配置設定的記憶體是有限的,一次性加載如此大的圖檔,非常容易導緻應用OOM崩潰。

是以必須使用加載部分區域的方式來加載圖檔。

Android提供了

BitmapRegionDecoder

來實作這個功能。

2. 擷取圖檔大小

通過

BitmapFactory.Options

inJustDecodeBounds

可以不加載圖檔而擷取圖檔大小。

此外,還需要考慮Exif資訊,處理圖檔旋轉或者翻轉屬性。

Android提供了

ExifInterface

處理Exif資訊。

3. 使用者互動

  • 輕按兩下縮放圖檔
  • 雙指縮放圖檔
  • 移動圖檔
  • ……

四、subsampling-scale-image-view

subsampling-scale-image-view完美解決以上所有問題。

GitHub項目位址:https://github.com/davemorrissey/subsampling-scale-image-view

WIKI幫助手冊:https://github.com/davemorrissey/subsampling-scale-image-view/wiki

五、Final

确定目标需求,到GitHub上尋找成品與半成品代碼可以有效得提供開發效率。

待神馬筆記功能逐漸穩定後,會繼續開源相關代碼。

通路已開源的代碼可以通路 https://github.com/jicanghai37927/WhatsAndroid 。

這個項目為神馬筆記的原型項目。