[英]What image size should I ask from UI developer?
我有一個具有以下屬性的ImageView
:
android:layout_width="match_parent"
android:layout_height="160dp"
UI開發人員問我在px中想要的Image大小。 我應該問什么尺寸? 我應該問不同尺寸的不同設備嗎?
注意
我沒有具有特定高度和寬度的ImageView
。 我的ImageView
寬度是match_parent
而不是特定的寬度。
所有答案都說我應該使用轉換器,如何將match_parent
轉換為px
?
根據答案,我應該問六張圖片,不應該嗎?
您應該為UI開發人員提供最高的屏幕密度(以像素為單位),然后自行擴展以降低密度。
通常,Android應用程序將支持屏幕密度ldpi at min和xxxhdpi at max。
步驟1:如果您希望圖像大小為160 x 160 dp
則為UI開發人員提供與最大屏幕密度相關的最高圖像大小。
160 x 4 = 640x640 px (why multiply by 4? I will explain later)
步驟2:根據屏幕密度將圖像640x640 px
縮放到較小的尺寸
提示:找到與mdpi密度屏幕對應的圖像大小(稱為base density
或1X
密度),然后通過以下公式縮放到其他密度
更新:從https://material.io/tools/devices/ ,基本密度屏幕的屏幕大小為360x640 px
。 因此,在1X
360x160 px
密度屏幕上,您的ImageView
尺寸將為360x160 px
。
ldpi: 270x120 px
mdpi: 360x160 px
hdpi: 540x240 px
xhdpi: 720x320 px
xxhdpi: 1280x480 px
xxxhdpi: 1440x640 px
你為什么不使用Vector drawable?
為何使用矢量?
您應該在項目中使用SVG圖像。
創建SVG而不是PNG文件
好的,你想設置大小為160dp的圖像高度(因為它是在dp中,這是mdpi中的大小)。 因此,您必須要求UI開發人員為您提供4倍高度的圖像。 圖像高度= 4 * 160.之后,您可以使用Android studio中的批量可繪制導入器,為所有不同的分辨率制作圖像。 希望能幫助到你。
不同的設備有不同的尺寸
android:adjustViewBounds="true"
是圖像的自動拾取高度
所以你可以這樣,
<ImageView
android:id="@+id/ivImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"/>
你可以參考這個
ldpi: 270x120 px
mdpi: 360x160 px
hdpi: 540x240 px
xhdpi: 720x320 px
xxhdpi: 1280x480 px
xxxhdpi: 1440x640 px
你應該選擇最大尺寸的1440x640
。
如果要支持具有多個圖像的多個設備,則可以進行5次標准圖像切片。
mdpi : 360x160 hdpi : 540x240 xhdpi : 720x320 xxhdpi : 1080x480 xxxhdpi : 1440x640
我想出了這些圖像尺寸,因為如果你看看最常見的顯示尺寸,其中最大的是三星Galaxy S8的1440x2960
。 (我知道2160x3840
,但它不是主流,我甚至會說它完全瘋了)。
在您的情況下,您將寬度設置為match_parent
,在每種情況下,最大(甚至是自定義)DPI最多為1440px
,因此您可以確保99%的時間不會超過它。 (目前大多數具有9:18或9:X比率設備的設備,如果超過1080,幾乎在每種情況下都具有1440像素寬度。檢查發布的最新設備的分辨率。)
所以你可以穩定在1440像素的寬度。 現在你的ImageView
高度是160dp。 哪個可以(如其他人所建議的) 160*4 = 640 px
,最大默認DPI xxxhdpi
。 您應該考慮標准dpis的高度,因為它固定為some dp
(160dp),這可能會改變自定義dpi設備,因此您可以支持640px大小的最大設備。 希望我對大小建議很清楚。
這是Material Design提供的官方尺寸圖表或者您可以要求xxxhpdi,這是基於1440 x 2960 px的圖像,並使用此網站獲取具有各種密度的所有圖像。 當您獲得具有各種密度的圖像時,無需在px布局中指定高度和寬度。 保持圖像的名稱相同,並使用match_parent。 Android會根據設備自動選擇圖像。
要在具有不同像素密度的設備上提供良好的圖形質量,您應該在應用程序中提供每個位圖的多個版本 - 每個密度桶一個,具有相應的分辨率。 否則,Android必須縮放您的位圖,使其在每個屏幕上占據相同的可見空間,從而導致縮放偽像,例如模糊 。
圖1.不同密度大小的位圖的相對大小
您可以在應用中使用多個密度存儲桶。 表1描述了可用的不同配置限定符以及它們適用的屏幕類型。
表1.不同像素密度的配置限定符。
要為不同的密度創建替代位圖可繪制, 您應遵循 六個主要密度之間的 3:4:6:8:12:16縮放比例 。 例如, 如果您有一個位圖可繪制的 中等密度屏幕為48x48像素 ,則所有不同的大小應為:
然后,將生成的圖像文件放在res /下的相應子目錄中,系統將根據運行應用程序的設備的像素密度自動選擇正確的文件:
RES /
繪制-xxxhdpi /
awesome-image.png
繪制-xxhdpi /
awesome-image.png
繪制-xhdpi /
awesome-image.png
提拉 - 華電國際/
awesome-image.png
繪制,MDPI /
awesome-image.png
然后,只要你引用@ drawable / awesomeimage ,系統就會根據屏幕的dpi選擇合適的位圖。 如果您沒有為該密度提供密度特定的資源,系統會選擇下一個最佳匹配並對其進行縮放以適合屏幕。
官方消息來源: 屏幕密度
試試這個源代碼
Display display = getWindowManager().getDefaultDisplay();
String displayName = display.getName(); // minSdkVersion=17+
Log.i(TAG, "Pantalla = " + displayName);
// Tamaño en píxeles
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
Log.i(TAG, "Ancho = " + width);
Log.i(TAG, "Alto = " + height);
// dpi
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int heightPixels = metrics.heightPixels;
int widthPixels = metrics.widthPixels;
int densityDpi = metrics.densityDpi;
float xdpi = metrics.xdpi;
float ydpi = metrics.ydpi;
Log.i(TAG, "Ancho en píxeles = " + widthPixels);
Log.i(TAG, "Alto en píxeles = " + heightPixels);
Log.i(TAG, "Densidad dpi = " + densityDpi);
Log.i(TAG, "x dpi = " + xdpi);
Log.i(TAG, "y dpi = " + ydpi);
// Deprecated
int screenHeight = display.getHeight();
int screenWidth = display.getWidth();
Log.i(TAG, "Alto de pantalla = " + screenHeight);
Log.i(TAG, "Ancho de pantalla = " + screenWidth);
// Orientación
int orientation = getResources().getConfiguration().orientation;
Log.i(TAG, "Orientación = " + orientation);
是的,如果您不想使用矢量並希望使用圖像(png等),則需要為不同的屏幕尺寸拍攝多張圖像。
由於您的寬度為match_parent
,在這種情況下,請為不同密度桶采用最大屏幕寬度的圖像: -
MDPI -> 320 px
HDPI -> 480 px
XHDPI -> 640 px
XXHDPI -> 1080 px
一個dp是一個虛擬像素單元,大致等於中密度屏幕上的一個像素(160dpi;“基線”密度)。
根據上述說法,您可以找到圖像的高度: -
MDPI -> 160 px
HDPI -> 240 px
XHDPI -> 320 px
XXHDPI -> 480 px
如何計算 : -
考慮一下, 160 dp
將是mdpi(1x)的160 px。
160 dp would be 240 px in hdpi (1.5x).
等等..
或使用函數px = dp * (dpi / 160)
對於HDPI,dpi為240
px = 160 * 240/160
px = 240
對於dpi列表,請參閱此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.