1

当我们在这里时,Android 相当于[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(nonatomic, readonly) CGFloat scale

讨论

该值反映了从默认逻辑坐标空间转换到该屏幕的设备坐标空间所需的比例因子。默认逻辑坐标空间使用点进行测量,其中一个点大约等于 1/160 英寸。如果设备的屏幕具有相当相似的像素密度,则比例因子通常设置为 1.0,以便一个点映射到一个像素。但是,具有显着不同像素密度的屏幕可能会将此属性设置为更高的值。

我想知道边界的宽度是否等同于 DisplayMetrics 的 widthPixels 以及比例值是否等同于 Android 上的密度值。

4

2 回答 2

6
[UIScreen mainScreen].bounds.size.width = displayMetrics.widthPixels

正确,屏幕(显示)的宽度(以像素为单位),这里没什么复杂的。

[UIScreen mainScreen].scale = displayMetrics.density

并不真地。它们是相似的值,但绝对不相等。

我将尝试解释是什么scale。我们有屏幕分辨率为 1024x768 的 iPad 1,我们有双分辨率的 iPad 3(苹果营销部门称之为 Retina),我们希望应用程序可以在这两种设备上运行。因此,应用程序在分辨率 1024x768(逻辑点)上工作,但操作系统使用比例转换为每个设备上的物理像素(iPad 1 上的比例=1.0,iPad 3 上的比例=2.0)。例如,当您在逻辑坐标 (1, 1, 20, 40) 上绘制一个矩形时,在 iPad 3 上它将绘制在像素 (2, 2, 40, 80) 上。

目前只定义了两个值:1.02.0

密度是一个类似的比例因子,但计算方式不同

这是密度独立像素单元的比例因子,其中一个 DIP 是大约 160 dpi 屏幕上的一个像素 请注意,它再次将逻辑点(在 Android 上称为 DIP)转换为屏幕像素。

iOS规模和Android密度的区别在于逻辑单元的定义不同。

于 2012-11-29T00:52:06.597 回答
-3

我用这个:

    private void SetScreenSizes() {
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        intScreenWidth = displaymetrics.widthPixels;
}
于 2012-11-29T00:12:27.900 回答