Android屏幕密度
2015-09-09 18:03
357 查看
参考原文地址:
http://blog.csdn.net/zapperbot/article/details/48268721?ref=myread
http://blog.csdn.net/sqk1988/article/details/7040953
http://blog.csdn.net/tanqiantot/article/details/11174011
http://blog.csdn.net/tanqiantot/article/details/8777736#comments
例如iphone4s:960x640像素,对角线3.5英寸,则ppi=(960*960 +640*640)/ 3.5 = 329.6ppi
2、dpi-dolt per inch,dpi单位长度像素点数,感觉和ppi定义类似,其计算方法也一样,可以粗略理解为两者一样,只不过这里一个点代表一个像素.如果A手机屏幕宽度是5CM,B手机宽度是10Cm,宽度分辨率都是320,那么显示同一张图片时,B手机上的图片就会显的大一点,并且没有A手机上的清晰。为什么呢,这就是我们常见的密度(DPI)概念,即每英寸多少个点。—–(理解dp:屏幕分辨率;px:像素)
3、dip - density-independent pixel:dip密度无关像素,其实并不是像素,与pixel有如下转换关系:
px = dp * (dip / 160); (之所以要除以160,是因为定义对于dip为160的屏幕,其一个像素与一个dp相同)
4、屏幕大小(Screen Size):屏幕的实际尺寸,指屏幕对角线的长度,单位inch,android中根据屏幕大小,把屏幕氛围几个等级:small、normal、large、extra-large
5、屏幕密度(Screen density):用dpi来表示,android把屏幕密度分为:low、medium, high、extra high
6、sp(scaled-independent pixel):可以把它理解为dip(或dp),只不过专门用来表示字符大小
7、分辨率:显示器能够示显的像素多少。(水平×垂直 如1028×768)
ldpi: 屏幕密度为120的手机设备
mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px)
hdpi: 屏幕密度为240的手机设备
xhdpi: 屏幕密度为320的手机设备
xxhdpi:屏幕密度为480的手机设备
如果是480x800的切图,则应该放入drawable-hdpi目录下,
如果是320x480的切图,则应该放在mdpi目录下。
如果是720x1280的切图,则应该放在xhdpi目录下。
把同样图片放在不同的drawable文件夹中,显示效果是不一样的。效果如下
![](http://img.blog.csdn.net/20150909174503026)
![](http://img.blog.csdn.net/20150909174146733)
从上表可以得出如下结论
1. 图片放在drawable中,等同于放在drawable-mdpi中,原因为:drawable目录不具有屏幕密度特性,所以采用基准值,即mdpi
2. 图片放在某个特定drawable中,比如drawable-hdpi,如果设备的屏幕密度高于当前drawable目录所代表的密度,则图片会被放大,否则会被缩小;放大或缩小比例 = 设备屏幕密度 / drawable目录所代表的屏幕密度
3. 为了更全面的适配所有设备,我们应该提供一套针对主流屏幕密度的图片(目前为hdpi或xhdpi),其他密度通过系统自动缩放得到图片
float a = this.getResources().getDisplayMetrics().density; //dp
int b = this.getResources().getDisplayMetrics().densityDpi; //密度值
可以通过上面的代码来获取当前设备的屏幕密度,a为dp值,b为密度值,如a=1则表示你的设备屏幕类型为Mdpi
DisplayMetrics dm = new DisplayMetrics();
dm = cx.getApplicationContext().getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels; 屏幕宽度
图片显示:
android系统加载图片资源遵循下面的规则:首先判断手机的屏幕密度,然后在相应的密度下文件夹中查找图片资源。如果找到,则进行显示。如果找不到,则会从drawable或者其他drawable-*文件夹中寻找。找到后,将文件夹所表示的密度与手机实际密度进行比较,从而缩放图片。例如在drawable下找到资源(等价于从drawable-mdpi),而手机又是hdpi的,这样android在显示图片时会将图片进行放大,以满足hdpi手机显示需要。不难想象,图片肯定会变模糊。
如果放错文件夹,系统会进行相应的缩放,使图片进行错误的缩放。例如hdpi的图片放到mdpi中,在hdpi的手机显示,会比原图片大
设计给切图,最好根据那个dpi呢?是都可以吗?一般应该给480*800的hdpi的切图。这样对于mdpi,可以自动缩小。图像显示质量不受影响。对于xdpi,放大幅度不大,图像显示质量影响较小。
那么为什么不用xhdpi呢,这样都是缩小图像不是更好吗?有两个理由,一是增大了apk的尺寸,另一个就是容易引起切图的变形,影响显示。主要是对于.9的图片,有对某一方向进行了压缩,如果设置时,拉伸区域太小,再压缩时可能变形。当然这也不是绝对的,可以通过增大.9.png文件的拉伸区域来实现。
或许还有个理由,xhpi的机型比较不占多数。
http://blog.csdn.net/zapperbot/article/details/48268721?ref=myread
http://blog.csdn.net/sqk1988/article/details/7040953
http://blog.csdn.net/tanqiantot/article/details/11174011
http://blog.csdn.net/tanqiantot/article/details/8777736#comments
概念:
一、几个概念
1、ppi-pixel per inch,ppi单位长度像素个数。计算方法是宽宽 + 长长,然后开方(即对角线的像素个数),然后除以对角线的长度。例如iphone4s:960x640像素,对角线3.5英寸,则ppi=(960*960 +640*640)/ 3.5 = 329.6ppi
2、dpi-dolt per inch,dpi单位长度像素点数,感觉和ppi定义类似,其计算方法也一样,可以粗略理解为两者一样,只不过这里一个点代表一个像素.如果A手机屏幕宽度是5CM,B手机宽度是10Cm,宽度分辨率都是320,那么显示同一张图片时,B手机上的图片就会显的大一点,并且没有A手机上的清晰。为什么呢,这就是我们常见的密度(DPI)概念,即每英寸多少个点。—–(理解dp:屏幕分辨率;px:像素)
3、dip - density-independent pixel:dip密度无关像素,其实并不是像素,与pixel有如下转换关系:
px = dp * (dip / 160); (之所以要除以160,是因为定义对于dip为160的屏幕,其一个像素与一个dp相同)
4、屏幕大小(Screen Size):屏幕的实际尺寸,指屏幕对角线的长度,单位inch,android中根据屏幕大小,把屏幕氛围几个等级:small、normal、large、extra-large
5、屏幕密度(Screen density):用dpi来表示,android把屏幕密度分为:low、medium, high、extra high
6、sp(scaled-independent pixel):可以把它理解为dip(或dp),只不过专门用来表示字符大小
7、分辨率:显示器能够示显的像素多少。(水平×垂直 如1028×768)
ldpi: 屏幕密度为120的手机设备
mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px)
hdpi: 屏幕密度为240的手机设备
xhdpi: 屏幕密度为320的手机设备
xxhdpi:屏幕密度为480的手机设备
如果是480x800的切图,则应该放入drawable-hdpi目录下,
如果是320x480的切图,则应该放在mdpi目录下。
如果是720x1280的切图,则应该放在xhdpi目录下。
把同样图片放在不同的drawable文件夹中,显示效果是不一样的。效果如下
Tip1:屏幕密度的应用:
已知:屏幕密度(Screen density):用dpi来表示,android把屏幕密度分为:low、medium, high、extra high。在实际应用中,与图片显示有关。从上表可以得出如下结论
1. 图片放在drawable中,等同于放在drawable-mdpi中,原因为:drawable目录不具有屏幕密度特性,所以采用基准值,即mdpi
2. 图片放在某个特定drawable中,比如drawable-hdpi,如果设备的屏幕密度高于当前drawable目录所代表的密度,则图片会被放大,否则会被缩小;放大或缩小比例 = 设备屏幕密度 / drawable目录所代表的屏幕密度
3. 为了更全面的适配所有设备,我们应该提供一套针对主流屏幕密度的图片(目前为hdpi或xhdpi),其他密度通过系统自动缩放得到图片
Tip2:dp
dp工作原理[code] 最关键要记住一个公式: android在计算pixel值时会首先判断屏幕的密度。如果我们把mdpi设为1,则hdpi就等于1.5. 如果我们使用dp为单位,android在转换为pixel时会依据下面公式: px = dp * density; 像素数 = dp * 每英寸的逻辑点数。 dp表示独立像素密度,所谓独立,就是不依赖与屏幕的密度。 从本质上来看,dp其实表示是相同的物理长度,注:不是以像素为单位,而是以inch为单位。 例如对于mdpi,长度为m inch的屏幕,其像素数为n1,dp数为n2. 对于hdpi,也是长度为m inch,包含的像素数为n1 * 1.5. 根据公式可以算出,其dp值为n1 * 1.5 / 1.5 = n1. 对于xhdpi的也是n1. 即:相同的物理长度其dp值相同。
float a = this.getResources().getDisplayMetrics().density; //dp
int b = this.getResources().getDisplayMetrics().densityDpi; //密度值
可以通过上面的代码来获取当前设备的屏幕密度,a为dp值,b为密度值,如a=1则表示你的设备屏幕类型为Mdpi
DisplayMetrics dm = new DisplayMetrics();
dm = cx.getApplicationContext().getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels; 屏幕宽度
图片显示:
android系统加载图片资源遵循下面的规则:首先判断手机的屏幕密度,然后在相应的密度下文件夹中查找图片资源。如果找到,则进行显示。如果找不到,则会从drawable或者其他drawable-*文件夹中寻找。找到后,将文件夹所表示的密度与手机实际密度进行比较,从而缩放图片。例如在drawable下找到资源(等价于从drawable-mdpi),而手机又是hdpi的,这样android在显示图片时会将图片进行放大,以满足hdpi手机显示需要。不难想象,图片肯定会变模糊。
如果放错文件夹,系统会进行相应的缩放,使图片进行错误的缩放。例如hdpi的图片放到mdpi中,在hdpi的手机显示,会比原图片大
设计给切图,最好根据那个dpi呢?是都可以吗?一般应该给480*800的hdpi的切图。这样对于mdpi,可以自动缩小。图像显示质量不受影响。对于xdpi,放大幅度不大,图像显示质量影响较小。
那么为什么不用xhdpi呢,这样都是缩小图像不是更好吗?有两个理由,一是增大了apk的尺寸,另一个就是容易引起切图的变形,影响显示。主要是对于.9的图片,有对某一方向进行了压缩,如果设置时,拉伸区域太小,再压缩时可能变形。当然这也不是绝对的,可以通过增大.9.png文件的拉伸区域来实现。
或许还有个理由,xhpi的机型比较不占多数。
相关文章推荐
- 在 Android Studio 中使用OpenCV所遇到问题
- Android ViewPager多页面滑动切换以及动画效果
- Android ViewPager和Fragment实现顶部导航界面滑动效果
- android存储数据的四种方式
- Android 调用手机浏览器[小记]
- android五种布局的基本使用
- 自定义Android进度条的不同样式
- android zxing
- android中Logcat的TAG过滤
- PullToRefreshHeadGridView , GridView添加头部head的PullToRefresh
- Android一个完整的项目转成SDK提供给第三方嵌入
- [Android]应用语言切换的三种方法
- Android Canvas设置绘画时重叠部分的处理模式【含效果图】
- 利用HorizontalScrollView实现页签效果
- Android使用gradle不同配置多项目打包(升级版)
- 获取android的实时网速
- 深入理解Android之Gradle
- Android L Ripple的使用
- Android 仿照QQ剪裁头像(完结篇)
- android的窗口机制分析------ViewRoot类