px和dp(sp) 之间转化公式:

1  乘以(dp转px)或者除以(px转dp) scal缩放因子,在上浮0.5f

  • /**
  • * 密度转换像素
  • * */
  • public static int dip2px(float dipValue) {
  • return (int) (dipValue * scale + 0.5f);
  • }
  • /**
  • * 像素转换密度
  • * */
  • public int px2dip(float pxValue) {
  • return (int) (pxValue / scale + 0.5f);
  • }

2  而因子是根据系统的屏幕密度density(每英寸多少显示点)  /160 (默认加载mdpi的标准160ppi  1px(1倍的图))

     3  屏幕密度density:::

  • DisplayMetrics metric = new DisplayMetrics();
  • getWindowManager().getDefaultDisplay().getMetrics(metric);
  • 或者
  • DisplayMetrics metric = context.getApplicationContext().getResources().getDisplayMetrics();
  • int width = metric.widthPixels; // 屏幕宽度(像素)
  • int height = metric.heightPixels; // 屏幕高度(像素)
  • float density = metric.density; // 屏幕密度倍数(0.75(ldpi) / 1.0(mdpi) / 1.5(hdpi) /2(xhdpi) /3(xxhdpi) /4(xxxhdpi) )
  • int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240/ 320/ 480/ 640)

  

     4  还可以这样获取手机屏幕密度:::

1 手机 2垂直边 分辨率  平方和 结果 开平方 得到 斜角线的长度

2 除以 屏幕尺寸(比如 6寸),就是dpi密度

-----例如:   (2160*2160+1080*1080) 开平方后 / 6寸 = 402(华为mete10 pro)

5  scal因子 = displayMetrics实例 获取到densityDpi(120 160 240 320 480 640) /160 (mdpi的标准160ppi)):

6  Mdpi 160 是1倍 1px=1dp; hdip 240 是mdpi的 1.5倍 1dp=1.5px;  xhdpi 320 是mdpi的2倍 ;

xxhdpi 480 是mdpi的3倍;xxxhdpi 640 是mdpi的4倍。。。

7    不能根据分辨率来适配,根据密度(dpi)对应的文件夹来适配;

放到对应的目录下,否则会出现小图高分辨上不清晰

(  高分辨率适配上 图片要大), 大图放低分辨率上被压缩的时候也会消耗内存。

8   对应表:

1  像素密度范围  xhdpi之下的递增80 ; 以上的都是递增 160 ;

2  一般都是16:9 (1280*720p  1920*1080p  2560*1440 2k);

全面屏幕 出现后,开始有了大概2:1 比例的分辨率,  宽都是1080高度不同 (2280*1080 2246*1080 2160*1080)

 
像素密度等级 像素密度范围 分辨率(通常) 像素密度与dp转换关系
ldpi —dpi-120dpi 320*240   1dp = 0.75px
mdpi 120dpi-160dpi 480*320 (Half-size VGA) 1dp = 1px
hdpi 160dpi-240dpi 800*480 (Wide VGA) 1dp = 1.5px
xhdpi 240dpi-320dpi 1280*720 1dp = 2px
xxhdpi 320dpi-480dpi 1920*1080 1dp = 3px
xxxhdpi 480dpi-640dpi 3840*2160 1dp = 4px
 

其他:::

1  android 一般都是以iphone 750为比例来设计。。。一般用2x倍的切图, 因为android的720p和750相差不大。

2  Screen屏幕的高度,包括顶部状态栏 和 底部的操作栏。

3  Windows窗口的高度,只包括app可视区页面高度。

4  类似前端js也是一样: scrollHeight 整个页面的滚动高度;clientHeight 可视区高度.

附: sketch的标注标准

android屏幕密度规律及dp px转换的更多相关文章

  1. Android屏幕密度(Density)和分辨率概念详解

    移动设备有大有小,那么如何适应不同屏幕呢,这给我们编程人员造成了很多困惑.我也是突然想到这些问题,然后去网上搜搜相关东西,整理如下.   首先,对下面这些长度单位必须了解. Android中的长度单位 ...

  2. dp px 转换工具

    public class DensityUtil { private final static String TAG = "DensityUtil"; private static ...

  3. Android 屏幕密度适配

    Android Icon Size and Location for Apps   分辨率 DPI Density scale 1dp对应像素 1dp对应物理尺寸 Location Icon Size ...

  4. dp,px转换

    public static int dip2px(Context context, float dpValue) {        final float scale = context.getRes ...

  5. Android屏幕相关的概念

    1. 屏幕尺寸 实际的物理尺寸,作为屏幕的对角线测量. 为简单起见,安卓所有的实际屏幕尺寸为四个广义的大小:小,正常,大,和特大. 2. 屏幕密度 一个屏幕的物理区域内像素的数量:通常称为DPI(每英 ...

  6. Android度量单位说明(DIP,DP,PX,SP) (转帖)

    (一)概念 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不 ...

  7. Android度量单位说明(DIP,DP,PX,SP)

    本文转载于:http://blog.sina.com.cn/s/blog_6b26569e0100xw6d.html (一)概念 dip: device independent pixels(设备独立 ...

  8. Android中dip, dp, px,pt, sp之间的区别:

    Android中dip.dp.sp.pt和px的区别   1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更 ...

  9. Android 屏幕适配

    前言 手机的屏幕适配一直是非常麻烦的,现在我就以做笔记的方式来简单梳理下 单位理解 首先让我们先来看看关于手机所用到的单位 真实物理尺寸单位: mm:表示毫米,是屏幕的物理尺寸. in:表示英寸,是屏 ...

随机推荐

  1. best-case analysis in real-time system

    ECRTS: Exact Best-Case Response Time Analysis of Fixed Priority Scheduled Tasks motivation Real-time ...

  2. java se的那些细节

    局部变量:方法体内或语句块内,不能有修饰符 成员变量:与类的对象共存,可以有修饰符 类属性:与类共存,可以有修饰符 一.局部变量:必须先赋值,才能使用,如果不赋初值,则会报错,即没有默认的始使值,而基 ...

  3. AngularJS的$location基本用法和注意事项

    一.配置config app.config([ '$locationProvider', function($locationProvider) { $locationProvider.html5Mo ...

  4. x86_64汇编调试程序初步

    寄存器说明: rdi 存第1个参数(值或地址) rsi 存第2个参数 rdx 存第3个参数 rcx 存第4个参数 r8 存第5个参数 r9 存第6个参数 rax 第1个返回值 rdx 第2个返回值 r ...

  5. 1.5sleep()方法

    方法sleep()的作用是指在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)这个正在执行的线程是指this.currentThread()返回的线程. 测试如下 package com.cky.t ...

  6. (转)使用 vs.php 调试PHP

    转自:http://www.jb51.net/article/24618.htm   早先在asp横行的年代,php和asp一样,大都都是html中夹杂代码,说实话,这时候IDE的确用处不是很大,倒是 ...

  7. day21(Listener监听器)

    监听器只要分为监听web对象创建与销毁,监听属性变化,感知监听器. 1.监听web对象的创建与销毁 servletContextListener   监听ServletContext对象的创建和销毁 ...

  8. protobuf和protostuff的区别

    在我们的开发过程中,序列化是经常需要处理的问题,比如在做分布式访问数据时,或者是在做redis缓存存储数据时,如果我们涉及的知识面不够广的话,可能会简单的使用JDK的序列化,也即在需要序列化的类上im ...

  9. idea2018.2.4的安装激活与热部署插件JRebel的激活方法

    去Idea的官网下载如上版本的Idea安装文件 并且在网上搜索下载如下破解工具 放置在相应的Idea安装目录下 然后在Idea中输入激活码 { "licenseId": " ...

  10. vnc搭建

    PS:偶以前基本不用Linux的远程图形桌面,前几天有开发的同事配置CentOS的vnc有问题,找我解决,就顺便记录总结一下,这个总结是比较完整的.下面的配置在CentOS5.x和6.x.SUSE企业 ...