什么是[UIScreen mainScreen]的Android等价物.bounds.size.width?

时间:2012-11-29 00:04:58

标签: android ios

虽然我们正在使用它,但是等效的[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上的密度值。

2 个答案:

答案 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.02.0

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

  

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

iOS规模和Android密度之间的差异在于逻辑单元的定义不同。

答案 1 :(得分:-2)

我用这个:

    private void SetScreenSizes() {
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        intScreenWidth = displaymetrics.widthPixels;
}