px和dp(sp) 之間轉化公式:
1 乘以(dp轉px)或者除以(px轉dp) scal縮放因子,在上浮0.5f
- /**
- * 密度轉換像素
- * */
- public static int dip2px(float dipValue) {
- return (int) (dipValue * scale + 0.5f);
- }
- /**
- * 像素轉換密度
- * */
- public int px2dip(float pxValue) {
- return (int) (pxValue / scale + 0.5f);
- }
2 而因子是根據系統的屏幕密度density(每英寸多少顯示點) /160 (默認加載mdpi的標准160ppi 1px(1倍的圖))
3 屏幕密度density:::
- DisplayMetrics metric = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(metric);
- 或者
- DisplayMetrics metric = context.getApplicationContext().getResources().getDisplayMetrics();
- int width = metric.widthPixels; // 屏幕寬度(像素)
- int height = metric.heightPixels; // 屏幕高度(像素)
- float density = metric.density; // 屏幕密度倍數(0.75(ldpi) / 1.0(mdpi) / 1.5(hdpi) /2(xhdpi) /3(xxhdpi) /4(xxxhdpi) )
- int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240/ 320/ 480/ 640)
4 還可以這樣獲取手機屏幕密度:::
1 手機 2垂直邊 分辨率 平方和 結果 開平方 得到 斜角線的長度
2 除以 屏幕尺寸(比如 6寸),就是dpi密度
-----例如: (2160*2160+1080*1080) 開平方后 / 6寸 = 402(華為mete10 pro)
5 scal因子 = displayMetrics實例 獲取到densityDpi(120 160 240 320 480 640) /160 (mdpi的標准160ppi)):
6 Mdpi 160 是1倍 1px=1dp; hdip 240 是mdpi的 1.5倍 1dp=1.5px; xhdpi 320 是mdpi的2倍 ;
xxhdpi 480 是mdpi的3倍;xxxhdpi 640 是mdpi的4倍。。。
7 不能根據分辨率來適配,根據密度(dpi)對應的文件夾來適配;
放到對應的目錄下,否則會出現小圖高分辨上不清晰
( 高分辨率適配上 圖片要大), 大圖放低分辨率上被壓縮的時候也會消耗內存。
8 對應表:
1 像素密度范圍 xhdpi之下的遞增80 ; 以上的都是遞增 160 ;
2 一般都是16:9 (1280*720p 1920*1080p 2560*1440 2k);
全面屏幕 出現后,開始有了大概2:1 比例的分辨率, 寬都是1080高度不同 (2280*1080 2246*1080 2160*1080)
像素密度等級 | 像素密度范圍 | 分辨率(通常) | 像素密度與dp轉換關系 |
---|---|---|---|
ldpi | —dpi-120dpi | 320*240 | 1dp = 0.75px |
mdpi | 120dpi-160dpi | 480*320 (Half-size VGA) | 1dp = 1px |
hdpi | 160dpi-240dpi | 800*480 (Wide VGA) | 1dp = 1.5px |
xhdpi | 240dpi-320dpi | 1280*720 | 1dp = 2px |
xxhdpi | 320dpi-480dpi | 1920*1080 | 1dp = 3px |
xxxhdpi | 480dpi-640dpi | 3840*2160 | 1dp = 4px |
其他:::
1 android 一般都是以iphone 750為比例來設計。。。一般用2x倍的切圖, 因為android的720p和750相差不大。
2 Screen屏幕的高度,包括頂部狀態欄 和 底部的操作欄。
3 Windows窗口的高度,只包括app可視區頁面高度。
4 類似前端js也是一樣: scrollHeight 整個頁面的滾動高度;clientHeight 可視區高度.
附: sketch的標注標准