android的dpi含义

px:像素

dp:基于 density的抽象单位

dip:像素密度

sp:


px = dp *  density;

density = dpi / 160;

px = dp *dpi /160;






各个dpi对应关系
文件夹名称分辨率dpidensity
ldpi 120dpi0.75
mdpi 160dpi1
hdpi480*800240dpi1.5
xhdpi720*1280320dpi2
xxhdpi1080*1920480dpi3
xxxhdpi1440*2560640dpi4


所以如果只有一套切题的话,可以让美工根据1080*1920的比例给一套切图,这样根据公式px = dp/density 可以得到dp值是px的3分之1

举例说明:

美工根据1080*1920比例给出一个宽3px的textView;那么宽度值为1dp;TextView占频幕宽度3/1080 = 1/360;

当屏幕切换为720*1280时 ,density值变为2,那么1dp的宽度即为2px,所以TextView占频幕宽度2/720 = 1/360;

所以当两种不同分辨率手机都设置为1dp时,TextView所占屏幕比例是一直的;


常见的工具类中会有px和dp的转换方法:

[java] view plain copy print?
import android.content.Context;  

public class DensityUtil {  

    /** 
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素) 
     */  
    public static int dip2px(Context context, float dpValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (dpValue * scale + 0.5f);  
    }  

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
    /** 
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 
     */  
    public static int px2dip(Context context, float pxValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (pxValue / scale + 0.5f);  
    }  
}  

之所以会加上0.5是因为:
px为1时,如果通过px/density直接得到的是0,
px为2时,如果通过px/density直接得到的也是0,
加上0.5主要就是为了四舍五入,即
px为1时,如果通过px/density直接得到的是0,
px为1时,如果通过px/density直接得到的是1;





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值