我的设计有宽度,高度,填充......以毫米为单位。我现在正试图弄清楚如何将这些数字转换为Flutter使用的逻辑像素系统 我找到了the docs for the device pixel ratio,但我不确定如何解释这个数字,我引用:
Flutter框架以逻辑像素运行,因此很少需要直接处理此属性。
所以我不确定这是否可行。
我的问题归结为:有没有一种简单的方法可以计算从适用于Android和iOS的毫米级到逻辑像素?
答案 0 :(得分:1)
颤动的单位是DP或倾角(也称为密度无关像素)。 就像它的名字所暗示的那样,它与屏幕像素比率无关。
与毫米有什么区别?没有真正重要的。 转换mm> dp或dp> mm类似于mm> inch / inch> mm。
它们之间的关系非常简单:
1英寸= 25.4mm = 160.0DP
这意味着1 mm = 6.299 DP
答案 1 :(得分:0)
我想说目前接受的答案并不准确。
您可以打印真实手机的逻辑像素数,如下所示:
maxWidth = MediaQuery.of(context).size.width;
maxHeight = MediaQuery.of(context).size.height;
print("maxWidth = $maxWidth / maxHeight = $maxHeight");
如果有真正的iPhone和iPad可以运行此代码并告诉我最终的maxWidth和maxHeights,我将不胜感激。到目前为止,使用Android手机,我已经将结果与实际手机尺寸进行了比较。我得到的是:
请在此处查看我的电子表格: https://docs.google.com/spreadsheets/d/1zmGyeKSf4w4B-bX4HSY4oSuh9RkIIkFwYSd3P9C7eX8/edit?usp=sharing
<强>更新强>
Android文档(https://developer.android.com/training/multiscreen/screendensities#TaskUseDP)说&#34;一个dp是一个虚拟像素单元,在中密度屏幕上大致等于一个像素(160dpi;&#34 ;基线&#34;密度)&#34;。在三星和谷歌手机的实践中,这显然不是真的。或者,如果你注意&#34;大致&#34;。
Flutter docs(https://docs.flutter.io/flutter/dart-ui/Window/devicePixelRatio.html)说它每毫米有3.8个逻辑像素,这显然是非常错误的。
答案 2 :(得分:0)
逻辑像素是每单位距离(mm)的点数比率,因此您必须将问题更改为每毫米有多少个点代表1个逻辑像素?
正如所提到的here
Flutter遵循简单的基于密度的格式,例如iOS。资产可能 是1.0x,2.0x,3.0x或任何其他乘数。 Flutter没有DPS 但有逻辑像素,基本上与 与设备无关的像素。所谓devicePixelRatio表示 单个逻辑像素中物理像素的比率。
并且如上所述,1.0x
逻辑像素比率在Android密度限定词中代表mdpi
。根据{{3}},mdpi ≃ 160DPI
和dpi
代表可以在1英寸(2.54厘米)范围内的一行中放置的单个点的数量,因此:
160dpi = 160 dots per inch = 6.299 dots per mm
由于mdpi ≃ 160DPI
和1个逻辑像素代表mdpi
,所以:
1.0x logical pixel ratio ≃ 6.299 dots per mm
答案 3 :(得分:0)
以实际大小显示小部件。
double millimeterToSize(double millimeter) => millimeter * 160 * 0.03937;