扩展知识:4k是什么意思1080p和是是意思

雅思2024-04-12 09:28:45佚名

你也可以看看我其他类似的文章,也会给你带来一些好处!

扩展你的知识:

4k是什么意思?

1080p 和 720p 是什么意思?

如果不明白百度百科解析最后一段可以参考这里

在开始解释dp之前,我们先来了解一些概念。

常用尺寸单位

px(像素):屏幕上的点,一般HVGA表示像素。

in(英寸):长度单位。

mm(毫米):长度单位。

pt(磅):1pt=1/72英寸,用于印刷行业,非常简单易用;

解决

“分辨率”表示为每个方向上的像素数等。在某些情况下,还可以表示为“每英寸像素数”(ppi)以及图形的长度和宽度。 例如,72ppi 和 8X6 英寸。

用于描述分辨率的单位有:dpi(每英寸点数)、lpi(每英寸线数)和 ppi(每英寸像素)。

Ppi 和 dpi 通常可以互换使用。 它们用于描述屏幕的属性或性能。 从技术角度来说,“像素”(P)只存在于计算机显示领域,“点”(d)只出现在印刷或打印领域。

使用ppi来描述手机屏幕属性。 在开发过程中,每个文件都对应着dpi。这两个单位的计算方法是一样的,只是描述不同,只是因为使用场景不同。

QVGA:分辨率为240*480(VGA为四分之一)

HVGA:分辨率为320*480(半尺寸VGA是一半)

VGA:分辨率为640*480(全称Video Array)

WVGA:分辨率为800*480(Wide VGA很多网页的宽度为800,所以WVGA手机屏幕会更适合浏览网页)

FWVGA:分辨率为854*480手机c8813

英寸是物理单位。 我们通常说的手机屏幕是4.3英寸。 4.5英寸指的是屏幕对角线长度,如下图所示:

分辨率 480 x 800、屏幕尺寸 4.3 英寸和分辨率 540 x 960、屏幕尺寸 4.5 英寸的 DPI 为:

与分辨率无关的测量单位

支持下面列出的所有单位

下面几个问题让大家更深入的了解dp的定义和含义

1. 为什么指定规格的显示器上1dp = 1px?

答:这个在公司官方文档中有解释,因为第一台设备(HTC的T-G1)就属于它。

尺寸 和 是尺寸和 mdpi() 。 这是基于第一款 T-G1,它具有 HVGA(直到 1.6,这是唯一的)。

为什么说它属于?

T-G1的DPI,其实它准确的PPI并不等于160。G1的配置信息如下:

屏幕尺寸:3.2英寸(8.1厘米)

分辨率:320×480(HVGA)

如果按照上面的计算方法,T-G1应该属于。 用计算器计算,结果是180。

为什么不直接使用 180 作为基准 (mdpi) 而不是 160?

180不太好适应dpi是什么意思,但是160无论是乘以0.5/2/1.5都很容易适应。 这就是为什么它属于而不是等于。

为什么选择一个作为标准呢?

其实为了不针对每个设备厂商做适配(其实资源文件的分包也算适配:-hdpi、-ldpi),不同屏幕尺寸、不同dpi的设备大致分为四类,如图以下:

可以看到,T-G1的参数属于mdpi区域,以上就是以它们为基准的原因。

编程过程中获得的dpi与手动计算的dpi不同。 由于这里的分类,不同 dpi 设备上的缩放比例略有不同。 详细请看下面第三点。

2. DP

如果有兴趣,可以看一下这个类的源代码(网站):.util。 (.java)。 这个类有非常详细的dpi相关的成员函数和变量。 下面的代码是开发时获取dpi的代码。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
iDensity = (int)( metrics.density * 160 );

2.1. 为什么要引入dp?

答:dp其实就是dip(像素),独立密度像素,也就是说与密度(dpi)无关。

我使用dp作为单位设置控件。 无论您的屏幕尺寸或dpi如何,显示效果始终保持一致。

例子:

不要使用dp,使用px效果

如果我们不引入dp,仍然使用原来的px,那么现在我们需要在手机屏幕上画一条直线。 在(每英寸160像素)、宽度为1英寸的手机上,我们将这条线的长度设置为160px(占用160像素),即直线的长度正好是手机的宽度。 但是(每英寸240像素),如果这个应用安装在宽度为1英寸的手机上,长度仅为屏幕宽度的2/3。

类似下面的效果:

使用dp的效果

为了使用户界面能够在当前和未来的显示类型上正确显示,建议您始终使用 sp 表示文本大小单位,使用 dup 表示其他元素。当然,您也可以考虑使用矢量图形而不是位图

2.3. px和dp的换算公式

px和dp之间的换算公式:px = dp * (dpi / 160)

dp:dp 是一个像素,表示 160 dpi 下的像素大小(每英寸点数:每英寸点数)。

dp是dip:(与设备无关的像素)

dp 是与密度无关的像素单位。 在每英寸 160 点的屏幕上,1dp = 1px

不同的设备有不同的显示效果。 这与设备硬件有关。 一般来说,为了支持WVGA、HVGA和QVGAdpi是什么意思,我们推荐使用这个,它不依赖像素。

<Button android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="@string/clickme"  
    android:layout_marginTop="20dp" />  

sp:sp 是相同的基本单位,但由用户的文本大小(它是缩放像素)决定,因此在文本大小时使用此单位(但从不用于大小)。

(缩放像素)。 主要用于定义字体大小,不再使用

<TextView android:layout_width="match_parent"   
    android:layout_height="wrap_content"   
    android:textSize="20sp" />  

px:(像素)。 不同设备显示效果相同。 一般来说,HVGA代表像素,用得比较多。

3、为什么手动计算的dp对应的px大小与实际显示的px不一样

1、不同手机上的控件大小和屏幕比例其实是差不多的。 由于屏幕尺寸、像素密度等紧密归为一类dpi,因此实际显示的px与手动计算的px尺寸存在一定差异。

由于 的划分,使用了 dp 作为长度单位,导致计算出的 px 与实际显示的 px 不一致。

设备 1:索尼 Z2 屏幕尺寸:5.2 英寸 屏幕分辨率:1080*1920 DPI:424

设备2:华为Mate 7 屏幕尺寸:6.0英寸 屏幕分辨率:1080*1920 DPI:367

应用公式 px = dp * (dpi / 160),开发人员编写了一个高度为 48dp 的控件。

索尼Z2上的渲染像素为:48*424/160=127.2px

华为Mate 7上的渲染像素为:48*367/160=110.1px

这显然是荒谬的。

1、出现小数点像素数,像素最小单位为1,设备上无法显示。

2、根据实际截图测试,索尼Z2实际渲染像素为144px(@3x),华为Mate 7实际渲染像素为144px(@3x)。

也就是说,实际渲染的像素并不是按照这个公式计算的。 它是根据渲染倍率(即@2x、@3x)计算的。

实际渲染的像素如下:

在索尼Z2上实际渲染的像素为:48@3x=144px

华为Mate 7上实际渲染像素为:48@3x=144px

原因:

作为基准,对应的是1.0(mdpi),对应的是1.5(hdpi),对应的是2.0(xhdpi)...

最关键的一点是,真实手机屏幕的ppi将是最接近上述标准的标准ppi! 然后根据最接近的ppi来决定。

限定符指定比例

LDPI

低密度 (ldpi) 屏幕 (0dpi~) 的资源。

1dp=3/4像素

平均密度指数

中密度 (mdpi) 屏幕的资源 (~)。 (这是基线密度。)

1dp = 1 像素

高清晰度

高密度 (hdpi) 屏幕的资源 (~)。

1dp = 1.5 像素

高清像素

超高密度 (xhdpi) 屏幕的资源 (~)。

1dp = 2 像素

超高密度()屏幕的资源(~)。

1dp = 3 像素

超超高密度()屏幕的资源(~)。

1dp = 4 像素

2.这是一个假设,使用手动计算的dpi(通过公式dpi = 屏幕对角线像素数(px)/屏幕对角线长度(in)),相同的dp在不同的移动设备上显示相同的物理尺寸手机,而不是相同的屏占比。

px和dp之间的换算公式:px = dp * (dpi / 160)

px = dp * (dpi / 160) = dp * (px (屏幕对角线像素) / in (屏幕尺寸) / 160)

因此,当dp不变且in不变时,屏幕对角像素数越多,控件的px就越大。

这是一个例子:

手机类型 屏幕对角线像素数 屏幕尺寸 显示像素数 160dp 显示英寸数 160dp 占屏幕对角线比例

手机A

480像素

3英寸

160

1英寸

1/3

手机B

640像素

2英寸

320

1英寸

1/2

手机C

960像素

3英寸

320

1英寸

1/3

即使使用dp,也不能保证理论上所有手机都能完美适配。

本质上是规定160dp等于1in,但是内部已经为手机做了很好的dpi划分,所以使用dp就成为了解决手机适配的方法。 您可以使用多部手机进行验证。

那么为什么用dp作为长度单位可行呢?

有可能在手机的发展过程中,手机A不会从手机B变成手机B。即使有估计,也不会有这么大的反差(屏幕会缩小1/3)并且分辨率将增加1/2)。

另外,我估计手机厂商已经在内部设置好了dpi值。 谷歌在对屏幕进行分类时也处理了这些问题。 关于手机对应的dpi如何分类,请参考这里。

本质上是规定160dp等于1in,但是内部已经为手机做了很好的dpi划分,所以使用dp就成为了解决手机适配问题的方法。

总结:dp也是dip。 这和sp基本类似。 如果设置长度和高度等属性,可以使用dp或sp。 但如果设置字体,就需要使用sp。 dp与密度无关,sp不仅与密度无关,而且与尺度无关。

如果屏幕密度是160,那么dp、sp和px是相同的。 1dp=1sp=1px,但是如果以px为单位的话,如果屏幕尺寸不变(假设还是3.2英寸),那么屏幕密度就变成了320。那么原来的宽度设置为100px,在上面看起来就矮了一半密度为320的3.2英寸屏幕与密度为160的3.2英寸屏幕相比。

但如果设置为100dp或100sp。 系统会自动将width属性值设置为200px。 即100 * 320 / 160。其中320/160可以称为密度缩放因子。 也就是说,如果你使用dp和sp,系统会根据屏幕密度的变化自动进行转换。

px和dp相互转换代码

package com.hujl.util;
import android.content.Context;  
public class DensityUtil {  
    /** 
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素) 
     */  
    public static int dip2px(Context context, float dpValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        //因为有的dpi为160的1.5倍,所以计算完后,为了没有小数,加0.5
        return (int) (dpValue * scale + 0.5f);  
    }  
    /** 
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 
     */  
    public static int px2dip(Context context, float pxValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (pxValue / scale + 0.5f);  
    }  
}  

参考:

该博客混淆了 dpi 和 ppi:

相关推荐

猜你喜欢

大家正在看

换一换