2019年1月1日 星期二

Android ImageView 搭配 wrap_content 時的寬高

markdown 當 ImageView 的寬高設定都是 wrap_content 時,很自然會想到圖片是以原始大小來顯示在螢幕上的,不過最近才發現這個原始大小的單位不是 pixel,而是 dp 例如以下 ImageView 的寫法
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_png">
</ImageView>
假設圖片的原始大小為 256 * 256 pixels,不要以為在螢幕上就是佔了 256 * 256 pixels 的大小,實際上是佔了 256 * 256 dp 的大小,dp 會隨著不同的 device 而改變。假設圖片放在 res/drawable 資料夾,如果 app 現在跑在 XXHDPI 的手機上,圖片載入後長寬會變為 3 倍,佔用的記憶體會變為 9 倍。 這除了會讓圖片在螢幕上的大小比你預想的大之外,也會讓圖片占用的記憶體大小大大超出你的預期,不可不注意。 --- Reference: * [Android中的dp,px以及wrap_content的实际展示效果](http://www.cnblogs.com/littlepanpc/p/3513929.html) * [關於Android中圖片大小、記憶體佔用與drawable資料夾關係的研究與分析](https://itw01.com/V3NTEFQ.html) * [Android坑档案:你的Bitmap究竟占多大内存?](https://zhuanlan.zhihu.com/p/20732309)