像素实例
2015-07-24 16:41
274 查看
px = dp * density / 160
公式中density表示屏幕密度,又名dpi(dots per inch)或者ppi(pixls per inch),
dpi和ppi这两个是密度单位,不是度量单位,而这两个恰恰是我们换算中重要的分母。简单理解一下:
ppi (pixels per inch):图像分辨率 (在图像中,每英寸所包含的像素数目)
dpi (dots per inch): 打印分辨率 (每英寸所能打印的点数,即打印精度)
ppi:我相信大家都应该经常看到,比如去中关村在线就会发现手机的众多参数中就有如此一条,比如小米4的441ppi(1920x1080像素,5英寸),还比如iPhone6的326ppi(4.7英寸,1334x750像素),那么这个ppi是怎么算出来的呢?公式如下:
PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数
√1920*1920+1080*1080/5=441, √1334*1334+750*750/4.7=326,就是这样算出来的。
设备一:480*320 4寸
√480*480+320*320/4=144,在此设备中,一个像素的长度为1/144,如果把一个控件的长度设为1px的话,那就相当于1/144寸。
设备二:960*640 4寸
√960*960+640*640+/4 = 288,在此设备中,一个像素的长度为1/288,如果把一个控件的长度设为1px的话,那就相当于1/288寸。
把两者进行对比会发现,我把我的app运行在第二种设备上的时候,发现尺寸缩水了,只有第一种设备的一半的长度了。怎么办?有什么解决办法吗?用google推荐的单位dp试试,把控件长度设为1dp,而不是1px。
由公式px = dp * density / 160,在设备一中,其density =144,通过次公式算出长度为1*144/160即0.9px,同时在设备一中,1px等于1/144寸,所以此控件的物理长度为0.9*1/144即0.00625寸。
在设备二中,通过公式px = dp * density / 160,其density =288,算出长度为1*288/160即1.8px,但是在设备二中,1px等于1/288寸,所以此控件的物理长度为1.8px*1/288寸,也是0.00625寸,由此可见,1dp在设备一和设备二上看起来的长度是一样的。是的,实际上就是这样的,dp是与设备无关的,1dp=1/72inch(好像是这么多)
ps:
对于一张200x200像素的图片,如果我们想要显示在 200ppi 的手机上,那么占用屏幕的长和宽均为 200pix / (200pix / inch) = 1 inch ,也就是说要占用 1 inch x 1 inch,如果要显示在 300ppi 的手机上,那么占用屏幕的长和宽均为 200pix / (300pix / inch ) = 2/3 inch,也就是说对于 ppi越高的手机,单位inch上能够显示更多的像素点,因此当这两种手机显示同样多的像素点的时候,ppi
越高的手机同一张图片看起来就越小。这就是我们想要图片在各种手机屏幕上都显示一致的效果时需要解决的问题。即屏幕适配问题。
公式中density表示屏幕密度,又名dpi(dots per inch)或者ppi(pixls per inch),
dpi和ppi这两个是密度单位,不是度量单位,而这两个恰恰是我们换算中重要的分母。简单理解一下:
ppi (pixels per inch):图像分辨率 (在图像中,每英寸所包含的像素数目)
dpi (dots per inch): 打印分辨率 (每英寸所能打印的点数,即打印精度)
ppi:我相信大家都应该经常看到,比如去中关村在线就会发现手机的众多参数中就有如此一条,比如小米4的441ppi(1920x1080像素,5英寸),还比如iPhone6的326ppi(4.7英寸,1334x750像素),那么这个ppi是怎么算出来的呢?公式如下:
PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数
√1920*1920+1080*1080/5=441, √1334*1334+750*750/4.7=326,就是这样算出来的。
设备一:480*320 4寸
√480*480+320*320/4=144,在此设备中,一个像素的长度为1/144,如果把一个控件的长度设为1px的话,那就相当于1/144寸。
设备二:960*640 4寸
√960*960+640*640+/4 = 288,在此设备中,一个像素的长度为1/288,如果把一个控件的长度设为1px的话,那就相当于1/288寸。
把两者进行对比会发现,我把我的app运行在第二种设备上的时候,发现尺寸缩水了,只有第一种设备的一半的长度了。怎么办?有什么解决办法吗?用google推荐的单位dp试试,把控件长度设为1dp,而不是1px。
由公式px = dp * density / 160,在设备一中,其density =144,通过次公式算出长度为1*144/160即0.9px,同时在设备一中,1px等于1/144寸,所以此控件的物理长度为0.9*1/144即0.00625寸。
在设备二中,通过公式px = dp * density / 160,其density =288,算出长度为1*288/160即1.8px,但是在设备二中,1px等于1/288寸,所以此控件的物理长度为1.8px*1/288寸,也是0.00625寸,由此可见,1dp在设备一和设备二上看起来的长度是一样的。是的,实际上就是这样的,dp是与设备无关的,1dp=1/72inch(好像是这么多)
ps:
对于一张200x200像素的图片,如果我们想要显示在 200ppi 的手机上,那么占用屏幕的长和宽均为 200pix / (200pix / inch) = 1 inch ,也就是说要占用 1 inch x 1 inch,如果要显示在 300ppi 的手机上,那么占用屏幕的长和宽均为 200pix / (300pix / inch ) = 2/3 inch,也就是说对于 ppi越高的手机,单位inch上能够显示更多的像素点,因此当这两种手机显示同样多的像素点的时候,ppi
越高的手机同一张图片看起来就越小。这就是我们想要图片在各种手机屏幕上都显示一致的效果时需要解决的问题。即屏幕适配问题。
相关文章推荐
- C#中使用JSON
- task的运用
- linux中bootable和kernel中子目录的作用
- ATL::CImage 使用范例
- Spring深入理解
- Android初学习 - 分别以Java code和XML两种方式给FrameLayout布局的Activity增加一个遮罩效果的实现
- Building Accessibility Services
- Android ListView 用法
- HDU 5303 dp
- Hans表的简单操作
- 调用小程序查看器的2个方法
- 【剑指offer】二维数组中的查找☆
- 安全漏洞扫描,风险原因分析及解决方案
- UILabel长度自适应内部字符串NSString纪录
- Objective-C学习笔记(二十三)——面向对象之封装
- 关于maven项目在引入java project 时,打war包出错的问题
- 使用JMH进行并发测试
- 1.a contest between satisfaction and temptation
- 【用户界面:android-Ultra-Pull-To-Refresh】之二:android-Ultra-Pull-To-Refresh框架分析
- CentOS安装cgdb