samlss / Summary

✍Personal summary.
17 stars 5 forks source link

请教一下 dp、dpi 换算 #1

Open eric-gitta-moore opened 3 weeks ago

eric-gitta-moore commented 3 weeks ago
//我们知道公式:
density = dpi / 160
px = density * dp;
//即
dp = px / density

//我们假设屏幕宽度为1080x1920 2.25inch*4inch,当前density = 3,dpi=160*3=480,那么
// 默认情况下屏幕宽度 1080px=360dp,可以理解 dp 就是 inch 的另外一个单位
px = 3 * dp;
dp = px / 3;

//再假设UI设计图的320px*480px 2inch*3inch 160dpi density=1
// 也就是说之前页面有个 widget width=320dp < 360dp,在页面上显示出来右边还差了 40dp,通过这个方法可以一定程度上按比例拉大
//那我们可以通过对比,获取对应的density值,为
dp = 1080 / 3 = 320 / newDensity

//可以得到
newDensity = 320 / 360 = 0.889; // 大屏显示小图,需要模拟低 dpi 的屏幕才行

//以下为设置适配activity屏幕的代码
DisplayMetrics dm = activity.getResources().getDisplayMetrics();
dm.density = newDensity;
dm.densityDpi = newDensity * 160; 
// ---------->>>>>>>>>>> newDensityDpi=142.24,那现在 320dp 应该要撑满 1080px 的宽度。或者换句话说,320dp 142dpi 应该显示 320px 的宽度 ????怎么都算不对
eric-gitta-moore commented 3 weeks ago

UI 设计稿 iPhone6 375×667 retina 屏幕,那么屏幕分辨率为 750*1334,设备尺寸 4.7inch,dpi=325

可得,iPhone 宽度为 750px/(325dpi/160dpi)=369dp

目标设备屏幕宽度为1080x1920 2.25inch4inch,当前density = 3,dpi=1603=480

可得,目标设备宽度为 1080px/(480dpi/160dpi)=360dp

假设代码固定 369dp,算一下需要多大的 dpi 才不至于溢出屏幕

由题意可得,1080/(x/160)=369 => x=468dpi


根据字节方案 //我们假设屏幕宽度为1080x1920,当前density = 3,那么 px = 3 * dp; dp = px / 3;

//再假设UI设计图的宽度为 750px //那我们可以通过对比,获取对应的density值,为 dp = 1080 / 3 = 750 / newDensity => newDensity = 2.08; => newDensityDpi = 332.8

这里为啥和上面算的不太一样

eric-gitta-moore commented 3 weeks ago

主要是相对比一下和 h5 的 vw 方案有什么区别,通过计算我有点没理解。

但通过枚举表格画图可以发现,一定程度上接近于线性关系

image

eric-gitta-moore commented 3 weeks ago

宽度-1dp 对应的像素大小的 300 倍 image