android屏幕密度规律及dp px转换
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转换的更多相关文章
- Android屏幕密度(Density)和分辨率概念详解
移动设备有大有小,那么如何适应不同屏幕呢,这给我们编程人员造成了很多困惑.我也是突然想到这些问题,然后去网上搜搜相关东西,整理如下. 首先,对下面这些长度单位必须了解. Android中的长度单位 ...
- dp px 转换工具
public class DensityUtil { private final static String TAG = "DensityUtil"; private static ...
- Android 屏幕密度适配
Android Icon Size and Location for Apps 分辨率 DPI Density scale 1dp对应像素 1dp对应物理尺寸 Location Icon Size ...
- dp,px转换
public static int dip2px(Context context, float dpValue) { final float scale = context.getRes ...
- Android屏幕相关的概念
1. 屏幕尺寸 实际的物理尺寸,作为屏幕的对角线测量. 为简单起见,安卓所有的实际屏幕尺寸为四个广义的大小:小,正常,大,和特大. 2. 屏幕密度 一个屏幕的物理区域内像素的数量:通常称为DPI(每英 ...
- Android度量单位说明(DIP,DP,PX,SP) (转帖)
(一)概念 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不 ...
- Android度量单位说明(DIP,DP,PX,SP)
本文转载于:http://blog.sina.com.cn/s/blog_6b26569e0100xw6d.html (一)概念 dip: device independent pixels(设备独立 ...
- Android中dip, dp, px,pt, sp之间的区别:
Android中dip.dp.sp.pt和px的区别 1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更 ...
- Android 屏幕适配
前言 手机的屏幕适配一直是非常麻烦的,现在我就以做笔记的方式来简单梳理下 单位理解 首先让我们先来看看关于手机所用到的单位 真实物理尺寸单位: mm:表示毫米,是屏幕的物理尺寸. in:表示英寸,是屏 ...
随机推荐
- best-case analysis in real-time system
ECRTS: Exact Best-Case Response Time Analysis of Fixed Priority Scheduled Tasks motivation Real-time ...
- java se的那些细节
局部变量:方法体内或语句块内,不能有修饰符 成员变量:与类的对象共存,可以有修饰符 类属性:与类共存,可以有修饰符 一.局部变量:必须先赋值,才能使用,如果不赋初值,则会报错,即没有默认的始使值,而基 ...
- AngularJS的$location基本用法和注意事项
一.配置config app.config([ '$locationProvider', function($locationProvider) { $locationProvider.html5Mo ...
- x86_64汇编调试程序初步
寄存器说明: rdi 存第1个参数(值或地址) rsi 存第2个参数 rdx 存第3个参数 rcx 存第4个参数 r8 存第5个参数 r9 存第6个参数 rax 第1个返回值 rdx 第2个返回值 r ...
- 1.5sleep()方法
方法sleep()的作用是指在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)这个正在执行的线程是指this.currentThread()返回的线程. 测试如下 package com.cky.t ...
- (转)使用 vs.php 调试PHP
转自:http://www.jb51.net/article/24618.htm 早先在asp横行的年代,php和asp一样,大都都是html中夹杂代码,说实话,这时候IDE的确用处不是很大,倒是 ...
- day21(Listener监听器)
监听器只要分为监听web对象创建与销毁,监听属性变化,感知监听器. 1.监听web对象的创建与销毁 servletContextListener 监听ServletContext对象的创建和销毁 ...
- protobuf和protostuff的区别
在我们的开发过程中,序列化是经常需要处理的问题,比如在做分布式访问数据时,或者是在做redis缓存存储数据时,如果我们涉及的知识面不够广的话,可能会简单的使用JDK的序列化,也即在需要序列化的类上im ...
- idea2018.2.4的安装激活与热部署插件JRebel的激活方法
去Idea的官网下载如上版本的Idea安装文件 并且在网上搜索下载如下破解工具 放置在相应的Idea安装目录下 然后在Idea中输入激活码 { "licenseId": " ...
- vnc搭建
PS:偶以前基本不用Linux的远程图形桌面,前几天有开发的同事配置CentOS的vnc有问题,找我解决,就顺便记录总结一下,这个总结是比较完整的.下面的配置在CentOS5.x和6.x.SUSE企业 ...