Android UI適配總結(jié)之圖片適配(1)

由于Android的屏幕尺寸的碎片化,時至今日Android的UI適配依然是開發(fā)中必不可少的步驟。
UI適配的適配,是通過dp、權(quán)重,通配符等方式使View能按我們意愿的準確的顯示在不同手機上。除了對view的尺寸適配,我們還要對圖片適配,合適的把切圖放在正確的位置,能有效的降低內(nèi)存占用和圖片變形。

本篇是對圖片適配的探索

首先,準備一張200*200像素的圖片(img.jpg)放在Android Studio (以下簡稱AS)的drawable文件目錄下,
然后對比不同drawable在不同手機(dpi)下,圖片的大小。

>>> xml
<ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img"
       />

>>>  java 打印當前手機中圖片的大小
  private void printBitmapSize(ImageView imageView) {
        Drawable drawable = imageView.getDrawable();
        if (drawable != null) {
            BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
            Bitmap bitmap = bitmapDrawable.getBitmap();
            Log.i("sky", " width = " + bitmap.getWidth() + " height = " + bitmap.getHeight());
        } else {
            Log.i("sky", "Drawable is null !");
        }
    }

Android中圖片默認類型是AEGB_8888,故width*height4=占用內(nèi)存大小(B)
通過查看AS中的profiler查看內(nèi)存占用,
MI 4 (MIUI10、1980*1080、xxhdpi、480dpi)當不加載圖片時的初始內(nèi)存為
23.6*

drawable 內(nèi)存大小 圖片尺寸
mdpi 55.6-23.6= 30m 3000 ->34.3
hdpi 35.6-23.6= 12m 2000 -> 15.25
xhdpi 29.2-23.6= 5.6 1500 -> 8.58
xxhdpi 21.1-23.6= -2.5 1000 -> 3.81
xxxhdpi 19-23.6= -4.6 750 -> 2.14

MZ 6p(Flyme7、1920*1080、 xxhdpi、480dpi)當不加載圖片的初始內(nèi)存為41.4

drawable 內(nèi)存大小 圖片尺寸
mdpi 116.5-41.4= 75.1 3000->34.3
hdpi 75.1-41.4= 33.7 2000->15.25
xhdpi 58.6-41.4= 17.2 1500->8.58
xxhdpi 50.4-41.4= 9.0 1000->3.81
xxxhdpi 47.1-41.4= 5.7 750->2.14

從上面可以看出本來應該放在xxhdpi中的圖片,當放置低于xxhdpi的文件夾目錄,會產(chǎn)生內(nèi)存占用增大(圖片顯示尺寸增大);當放置高于xxhdpi的文件夾目錄,會產(chǎn)生內(nèi)存占用減?。▓D片顯示尺寸減小);

PS:敲黑板,仔細看參數(shù)的同學一定發(fā)現(xiàn)了計算的內(nèi)存占用和實際內(nèi)存占用對不上,在小米4中甚至出現(xiàn)了加載圖片內(nèi)存反而變小的情況。。。。
原因呢?
我也不知道。有知道的同學請指教。
不過我們的重點不在值是否正確,而是放在不同dpi目錄下對內(nèi)存影響的趨勢,對不!對比上面表格內(nèi)的內(nèi)存占用基本也符合下圖的比例(2 3 4 6 8)。


image.png

補充下,(點9)圖片,左上是拉伸,右下是內(nèi)容顯示區(qū)域

圖片適配到這里已經(jīng)結(jié)束了。
簡單總結(jié)下:把正確的切圖放在正確的dpi文件目錄,能有效的解決開發(fā)中可能遇到的圖片內(nèi)存占用過大和顯示尺寸不正確情況;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容