文档章节

Android dpi,dip,dp的概念以及屏幕适配

风荷举
 风荷举
发布于 2016/05/06 18:20
字数 710
阅读 328
收藏 12

屏幕尺寸,屏幕分辨率 的含义

  • 屏幕尺寸: 屏幕的对角线长度,单位是英寸(in). 1英寸 = 2.54厘米
  • 屏幕分辨率: 屏幕横向和纵向的像素点数.(例如: 横向 1080px,纵向 1920px,则屏幕分辨率表示为: 1920 * 1080)

ppi, dpi, dip, dp, sp, px各代表什么?

  • ppi: 屏幕像素密度(pixels per inch), 是指屏幕上每英寸包含的像素点的数目.
    ppi = 屏幕对角线像素数目 / 屏幕尺寸
  • dpi: (dots per inch), 和ppi是相同概念的不同叫法. Android中主要采用dpi的叫法.
  • dip: 屏幕密度无关的像素(density independent pixels)
    Android中以 160dpi 的屏幕为基准, 规定在此屏幕上 1dip = 1px, 因此dip的公式为 1dip = DPI/160 px
  • dp: dip 的缩写
  • sp: (scale independent pixels), 和dp类似,只不过sp的缩放系数可以根据用户喜好设定,常用于设置文字大小
    1sp = scaleFactor px
  • px: 1像素

Android中图片的适配

  • drawable-ldpi          dpi = 120
  • drawable-mdpi        dpi = 160 (基准)
  • drawable-hdpi         dpi = 240
  • drawable-xhdpi       dpi = 320
  • drawable-xxhdpi     dpi = 480
  • drawable-xxxhdpi   dpi = 640

假设我们的屏幕dpi是480(对应的目录是drawable-xxhdpi)

  • drawable-xxhdpi目录中有需要的图片,那么系统将选取该图片并且不需要缩放.
  • 假设drawable-xxhdpi目录中没有需要的图片,那么系统将选取其它目录中的图片,并进行缩放
int screenDPI;//屏幕dpi
int dirDPI;//选取的图片所在目录对应的dpi
int dirImageWidth;//该目录下图片的宽度(像素)
int dirImageHeight;//该目录下图片的高度(像素)

那么系统缩放之后, Bitmap的宽度 w = dirImageWidth * screenDPI / dirDPI
               Bitmap的高度 h = dirImageHeight * screenDPI / dirDPI

BitmapFactory.decodexx会自动进行缩放, 放在drawable-nodpi目录中的除外

假设我们的屏幕dpi是480(对应的目录是drawable-xxhdpi), 目标图片尺寸 192 * 192

我们将这张图片放到不同的目录下,然后通过BitmapFactory.decodexx 来获取Bitmap,看看缩放后的尺寸:

图片放在 drawable-hdpi 中,缩放后的尺寸: 384 * 384
图片放在 drawable-xxxhdpi 中,缩放后的尺寸: 144 * 144
图片放在 drawable-nodpi 中, 不缩放: 192 * 192
...
  • 当屏幕dpi介于 drawable-xhdpi 和 drawable-xxhdpi 之间时(例如dpi = 400),那么系统将选用drawable-xxhdpi中的图片,并缩放
  • Android中的 density = densityDpi / 160
  • 假设设计师是以dpi=480的屏幕为基准来设计的,那么相应的切图应该放在drawable-xxhdpi目录中,假设其中一个图片的尺寸为72 * 72,那么XML中给他的大小应该设置为 24dp.  (72 / density)
  • 如果不希望BitmapFactory.decode出来的Bitmap被缩放,有2种方法
    1. 将图片放在drawable-nodpi目录下
    2. 将BitmapFactory.Options.inScaled设置为false (默认是true)

© 著作权归作者所有

风荷举
粉丝 11
博文 24
码字总数 24803
作品 0
朝阳
程序员
私信 提问
那些恶心人的Screen基本概念

Screen的这些基本概念中,最重要的就是dip的理解,而理解dip就是理解android适配不同设备的关键。 Screen Size 实际物理尺寸。就是我们常说的3.5英寸屏幕,4.7英寸屏幕等等,这个长度说的是对...

Madmatrix
2014/04/02
682
0
Andriod界面设计适配和Android Studio中的资源

Android的碎片化已经被喷了好多年,随着国内手机厂商的崛起,碎片化也越来越严重,根据OpenSignal的最新调查,2014年市面上有18796种不同的Android设备,作为开发者,一个无法回避的难题就是...

一配
2015/07/14
12.1K
3
用好Android图片资源,打造更精致的APP!

前言 由于android系统的开放性,以及IOS的相对封闭。第三方设备想要使用苹果的OS,目前来说是不可能。所以,各厂商纷纷的投入了android的怀抱, android阵营也越来越强大,如今移动操作系统也...

力谱宿云
2016/11/03
587
1
[RK3399][Android7.1] 调试笔记 --- 开机桌面显示位置偏移问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kris_fei/article/details/85137472 Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83 现象: 移植好LVDS屏...

KrisFei
2018/12/20
0
0
Android技能树 — 屏幕适配总结

前言: 关于屏幕适配,几乎每隔一段时间就会看见有人发出来说XXX方案,实现超级简单的适配方式等等。所以我把我目前了解过的常用的适配方案做个总结,并简单说说原理,从而让大家也初步了解各...

青蛙要fly
2018/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Activity启动模式二

上篇文章Activity启动模式一主要介绍了Activity的四种启动模式,这些启动模式都是在AndroidManifest中进行配置的。除此之外,Android系统还通过Intent类提供了一些标志位,同样可以指定Activ...

ltlovezh
54分钟前
7
0
三原色还原

1、Color Filter Array — CFA 随着数码相机、手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用。 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR 模式和 CFA 模式...

天王盖地虎626
今天
7
0
kubernetes pod exec接口调用

正文 一般生产环境上由于网络安全策略,大多数端口是不能为集群外部访问的。多个集群之间一般都是通过k8s的ApiServer组件提供的接口通信,如https://192.168.1.101:6443。所以在做云平台时,...

码农实战
今天
8
0
3_数组

3_数组

行者终成事
今天
8
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部