android 中dp px之间的关系

之前对他们之间的关系还算了解,但是有时候还是会被绕进去(可见还是没有真正理解,或者理解的角度不对),这次经过自己思考再加上一些

博文阅读,对他们之间的认识有清晰了一些,故写篇博客记录一下。

一:物理单位和虚拟单位。

首先我们要知道,我们在android上进行布局的单位一般要求的不是真正的物理单位,而是像dp这样的虚拟单位,这些虚拟单位是将物理单位

按照一定的比例来进行折算的,所以说他们其实是没有单位的,而仅仅是相对于物理单位的一个比例而已,不是物理单位。

我们先来复习一下物理单位,物理单位分为基本单位,和推算单位,如:长度的:毫米,厘米,米,这些单位就是基本单位,为什么这些是基

本单位,因为这些单位是人为固定的,这么长就是一厘米,那么长就是一米。那什么是推算单位呢?如速度:m/s(米/秒)等等,他们是由基本

单位之间通过运算得来的,他们的一个特点是:由两个基本单位组成。所以,所有物理单位要么是基本单位要么是推算单位,例如:我们将

5cm记作虚拟单位Y,那么1m=20Y,我们也可以将10cm记作一个虚拟单位Y,那么1m=10Y,虚拟单位相对于物理单位的值可以是变化的,下

面我们要讲的dp,他的值相对于px就是变化的。了解了这些,接下来我们进入正题。

二:android的单位划分。

px:即我们通常所说的像素,他是一个基本的物理单位。我们通常所说的屏幕分辨率,如:320.480,是指屏幕宽有320个像素点,长有480个

像素点,屏幕总共有320*480,即153600个像素点。

dpi:记住不是dip,他们之间是有区别的。dpi 是一个推算单位,他的单位为px/inch,即像素/英寸,通常我们称作为像素密度。

dip:即我们上面简称的dp,他是一个虚拟单位,专业术语即我们常说的:与设备无关的像素值,通俗来讲就像我们上面所定义的单位Y,他是

基于基本物理单位的,也就是他相对于物理单位来说的话,就是多少个px,不同设备这个多少就可能不一样,为什么不一样,android中是这样

规定的:dp=dpi/(160px/inch)px,就像我们上面定义Y的值一样,这个是人为规定的,虽然也可以另外一种定义法,但是这样定了就定了。因为

他是基于dpi的值来的,而不同设备的dpi值是不一样的,所以不同设备的dp值是不一样的。

inch:即英寸,他是基本的物理单位。我们通常所说的手机屏幕多少英寸是指这个屏幕的对角线长度。如:5英寸屏幕,那么这个屏幕的对角线

就是5英寸长。

density:这是一个比例值,他不依赖于基本单位,如:1m=100cm,这个100就是一个比例值,density就相当于这个100。他的比例值换算方

式为:dpi/(160px/inch),由这个换算方式,由于我们知道dpi的物理单位,最后所有的单位都会相互抵消,于是就只剩下一个比例值了。

三:各个单位之间的换算。

dpi:dots per inch,像素密度。dpi和density都可以通过android的API进行获取:

DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);	
		int dpi = dm.densityDpi;
		float desity = dm.density;
由以上的单位公式我们可以得出:

1dp = 1 dpi/(160px/inch)px = density px;

所以假设一个手机的像素密度(dpi)为400,那么可以就算出density=2.5,所以在这个手机上dp=2.5px,即2.5个像素。

那么1dp怎么换算成基本的物理单位呢?很简单,我们知道dpi了,dpi的单位就是px/inch,也就是每英寸有多少像素,我们前面已经将dp换算成

了px,上面的1dp=2.5px,而1px=1/400(inch),故1dp=2.5/400(inch),这样就将dp换算成了基本的物理单位。

参考连接:

http://blog.csdn.net/dinko321/article/details/7992776

http://www.cnblogs.com/see2851/archive/2011/11/28/2266642.html

http://zaodula.com/archives/2709.html



 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值