虽然我们正在使用它,但是等效的[UIScreen mainScreen].scale
是什么?
以下等式是否正确?
[UIScreen mainScreen].bounds.size.width = displayMetrics.widthPixels
[UIScreen mainScreen].scale = displayMetrics.density
你可以displayMetrics
这样:
DisplayMetrics displayMetrics = new DisplayMetrics();
Display display = ((WindowManager) someContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
display.getMetrics(displayMetrics);
问题在于我对iOS与Android的措辞感到困惑。
这些UIScreen值的定义如下:
边界
包含屏幕的边界矩形,以磅为单位。 (只读)
尺度
与屏幕相关的自然比例因子。 (只读)
@property(非原子,只读)CGFloat量表
讨论
此值反映了从中转换所需的比例因子 默认逻辑坐标空间进入设备坐标空间 这个屏幕。使用默认逻辑坐标空间 点,其中一个点大约等于1/160英寸。 如果设备的屏幕具有相当类似的像素密度,则缩放比例 factor通常设置为1.0,以便一个点映射到一个像素。 然而,可以设置具有显着不同的像素密度的屏幕 这个属性值更高。
我想知道边界的宽度是否等于DisplayMetrics的widthPixels以及比例值是否等于Android上的密度值。
答案 0 :(得分:4)
[UIScreen mainScreen].bounds.size.width = displayMetrics.widthPixels
正确,屏幕(显示)的宽度(以像素为单位),这里没什么复杂的。
[UIScreen mainScreen].scale = displayMetrics.density
不是真的。它们是相似的值,但绝对不相等。
我会尝试解释scale
是什么。我们有iPad 1,屏幕分辨率为1024x768,我们有iPad 3的双分辨率(苹果营销称之为Retina),我们希望应用程序可以在两个设备上运行。因此,该应用程序适用于分辨率1024x768(逻辑点),但操作系统使用比例转换为每个设备上的物理像素(iPad 1上的比例= 1.0,iPad 3上的比例= 2.0)。
例如,当您在逻辑坐标(1,1,20,40)中绘制一个矩形时,在iPad 3上将绘制像素(2,2,50,80)。
目前只定义了两个值:1.0
和2.0
。
密度是一个类似的比例因子,但计算方式不同
这是密度独立像素单元的缩放系数,其中一个DIP是大约160 dpi屏幕上的一个像素 请注意,它再次将逻辑点(在Android上称为DIP)转换为屏幕像素。
iOS规模和Android密度之间的差异在于逻辑单元的定义不同。
答案 1 :(得分:-2)
我用这个:
private void SetScreenSizes() {
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
intScreenWidth = displaymetrics.widthPixels;
}