配色: 字号:
分辨率、尺寸、分辨率密度的关系
2016-10-09 | 阅:  转:  |  分享 
  
屏幕尺寸=分辨率/分辨率密度。大屏手机比小屏手机显示的粗糙?对于同等分辨率的手机,小屏显示的更精细,图片的显示是和分辨率密度有关,同
等分辨率,屏幕尺寸越大,分辨率密度越低,图片尺寸=分辨率/分辨率密度尺寸很小,但是分辨率很大?一张图片放了三个文件夹有用没
用?H,M,L文件夹是对应手机分辨率密度,和图片没有关系。图片分辨率密度和手机分辨率密度相等,一比一放置,比手机分辨率密度小,拉伸
比手机分辨率密度大,缩小。图片都是位图,缩放失真,相对来说缩小比放大失真更小。480800488024032024
40图片显示和分辨率有关还是和分辨率密度有关?华为:7.6210.1692160077.4192平方厘米1638
4005184001468294Dpi每英寸像素的个数:计算方式:分辨率:ab分辨率长宽平方和开根号/屏幕尺
寸36864001166400图片最终的显示还是像素,在像素的基础上google整理出来一套规范,dip(dp)和像素无关性,d
ip和px的换算公式是px=densitydip(dp),dip(dp)是在xml布局中确定的。Density对应的是
密度,是一个比例值,计算公式:density=dpi/160像素/英寸,160像素/英寸是android定义的一个标准
(计算规范),至于原因是当前的主流是120,160,240,320,480,对应的密度是0.7511.523正好存在整
除关系,要用其他做标准不存在整除关系,精确度低。Dpi(每英寸像素个数,可以称作像素密度),常见的是120,240,320,480
等等,代表的是屏幕对角线每英寸的像素个数,计算公式涉及到分辨率所以先参考了解分辨率,dpi的计算公式是:设分辨率是长度为a,宽度为
b,计算对角线上像素个数是c=√aa+bb,dpi=c/屏幕的英寸。比如那手机华为G660为例:分辨率是1280720,
,5英寸的屏幕根据标准切换成厘米是5英寸=12.5厘米,根据勾股定理计算出来的屏幕宽高是高是10.16厘米,宽是7.62厘米,由上
面可以计算出对角线上的像素个数是1468,dpi(每英寸的像素个数)是接近294,android在计算的时候是约数计算,目前只有1
20到480几个标准(此处是猜测的,有知道详情的望告知),实测此款手机系统打印出来的dpi是320.备注:手机展示图片的精细程度和
dpi有关,同等尺寸,dpi越高,展示的精细程度越高,即同等尺寸分辨率越高,展示的精细程度越高。400块钱的大屏手机就好嘛?400
元的手机一大卖点就是大屏,真正好么?此手机的常见分辨率是960540960640480800;屏幕尺寸是5.5寸或者5寸
,此处举例分析5寸的上述三种分辨率的dpi及其展示图像的精细程度:上述三种对应的dpi是:1101.45,1153.8,933那
么5寸平对应的dpi是220,231,187,由此可见,低于标准240,第三种可以说是远低于,对于图像的展示效果并不好。此种分辨率
对应4寸到4.7的还好,高于4.7寸显示效果就不好了,5寸的屏至少的1280720效果才好一些分辨率:分辨率是图片或者屏幕的长宽
像素的个数,比如当前常见的是1280720,既是长度上的像素个数是1280,宽度上的像素个数是720,其他的分辨率也是如此。屏幕
尺寸:说的屏幕尺寸值得是屏幕的对角线,多用英寸。1英寸=2.539999918?厘米,5英寸接近于12.6厘米宽高比例:即常说
的宽和高比,常见的16:9,4:3等以上是关于手机和图片的几个专业术语及其信息整理。二.View在手机屏幕上的宽和高绘制。1.
对于android,在xml上布局通常使用dip(dp和设备无关性),由上可知:px=densitydp,density=
dpi/160,dpi是和分辨率有关的,对于android,dpi通常对应着120,160,240,320,480,(通常手机的
dpi达不到标准)由于android的默认标准是160,所以对于dpi=160的手机,px和dp是1:1的比例,对于dpi=1
20的手机,px=0.75dp,在手机上实际的长宽是设置的0.75倍,同理,对于dpi=240的手机,px=1.5dp
,view的真实尺寸是设置的1.5,dpi=320的是2倍,dpi=480的是3倍,综上可知,大于160的真实尺寸会拉伸,小于16
0的真实尺寸会缩小。2.由于android手机繁多,而且手机厂商由于追求美观,大屏等等原因,手机的真实dpi并不符合androi
d指定的标准,相对于相应的标准dpi,通常会小于。三.适配的原理:1.对于图片,系统有五个文件夹:drawable-xxhd
pi,drawable-xhdpi,drawable-hdpi,drawable-mdpi,drawable-ldpi对应的dp
i依次是480,320,240,160,120.对应的比例是:12:8:6:4:3,所以在切图的时候,针对当前最主流的dpi做一套
设计,然后切图,再根据上面说到的比例多做其他的4套图放到其对应的文件夹中。比如:当前最主流的分辨率是1280720,多数对应的是
320的dpi(按照标准是这个,不过大东莞无所不能啊),所以设计图可以按照1280720设计,对于一个长宽为40dip60di
p的view切一个图标为80120(由于dpi=320和标准是2:1的关系)的icon放到drawable-xhdpi里面,同时
需要120150,6090,4060,3045分别放到drawable-xxhdpi,drawable-hdpi,dra
wable-mdpi,drawable-ldpi这样能够精确的保证View的物理尺寸不变而且图片不会被拉伸和缩小。2.由二中的2可
知,手机的真实dpi接近于相应的标准但是略小于,以华为G660为例,真实dpi是294,接近于320,android系统识别的是3
20,于1同样大小的长度和高度(40dpi60dpi),按照320计算,其真实的长度是80px120Px,在华为上的实际长度是
73.5110.25,由于view’的width和height是int的所以是73110,加载图片是80120,图片会缩
小显示,图片的比例是0.666666,view’的宽高比是0.6636636,view宽高比近视接近图片的比例,缩小失真不大,对于
那些奇葩dpi(奇葩分辨率和奇葩屏幕尺寸)来说就不好说了。3.对于图标图片来说,1的适配方案是相对精确的,但是存在一大弊端是,图
片需要做5套,未来在增加的话还需要增加相应分辨率的图片,对于设计来说是灾难啊,有一个相应的替换方案就是制作切图的时候,制作最大dp
i(480)对应的分辨率图片,放到drawable里面,没有必要drawable-xhdpi等包中都放一份(减少打包大小)。此种方
案对应480dpi的时候不会缩放,对于其他的dpi时,都会缩小,但是对于图片来说,缩小比拉伸失真更小,减少一点精确度,能够减少不小
的工作量,而且包的大小也会相应的减小。个别的可以再按照1的方案适配。4.系统在解析图片的时候,图片的dpi必须要小于手机的dpi
,不然系统无法解析并展示图片。5.view的绘制是和dpi相关的,而dpi是由分辨率和屏幕尺寸决定的,不同的分辨率和屏幕尺寸组合
后的dpi可以相同的,这样就出现了问题,比如我有两个手机,一个是480800分辨率和4.3寸屏dpi是240,还有一个手机是32
0480,尺寸是3.5寸dpi也是240,此时对于一个设定dip的view来说就出问题了,还是说那个面40dp60dp的vie
w,在240的对应像素是60px90px,那这样问题就来了,宽为480px,view的宽是60,宽为320px,view的宽也是
60,整体UI出现混乱了,我想到的办法是在xml布局文件中不是直接写死40dp和60dp,而是写dimens文件,可以定义不同分辨
率和不同分辨率密度下的宽和高,同时android系统也可以分辨率的模式设置文件夹,即drawable-1280x720,value
-1280x720等等,在系统加载的时候会根据分辨率优先加载,此时的便利顺序应该是drawable-1280x720----dra
wable-xhdpi-----drawable。如果对于背景类的view设置了动态的width和height,也要必须同时创建相
应分辨率的drawable,放入与其宽高相应的背景图片。6.还有一种方式,google都不建议使用的在此描述,不过多了解:an
droid3.2以后,为了提供更精准的对布局文件的控制,可以通过为资源文件(res目录下文件)增加后缀来指定该文件夹里的xml布局
文件或color.xml,string.xml是为哪种大小的屏幕使用。第一种后缀:swdp,如layout-sw600dp,
values-sw600dp这里的sw代表smallwidth的意思,当你所有屏幕的最小宽度都大于600dp时,屏幕就会自动到带
sw600dp后缀的资源文件里去寻找相关资源文件,这里的最小宽度是指屏幕宽高的较小值,每个屏幕都是固定的,不会随着屏幕横向纵向改变
而改变。第二种后缀wdp如layout-w600dp,values-w600dp带这样后缀的资源文件的资源文件制定了屏幕
宽度的大于Ndp的情况下使用该资源文件,但它和swdp不同的是,当屏幕横向纵向切换时,屏幕的宽度是变化的,以变化后的宽度来与
N相比,看是否使用此资源文件下的资源。第三种后缀hdp如layout-h600dp,values-h600dp这个后缀的
使用方式和wdp一样,随着屏幕横纵向的变化,屏幕高度也会变化,根据变化后的高度值来判断是否使用hdp,但这种方式很少
使用,因为屏幕在纵向上通常能够滚动导致长度变化,不像宽度那样基本固定,因为这个方法灵活性不是很好,google官方文档建议尽量少使用这种方式。摘自综上可知,图片的加载和分辨率有关,也和dpi有关,具体看当前view是怎么处理的,如果是在xxhdpi,xhdpi,hdpi,mdpi,ldpi或者在xml直接写死宽和高,系统的图片加载取决于前面四个文件夹,如果通过dimens文件设置了不同分辨率,就和分辨率有关了。两种用法最好不要混合使用,混合的话就是按照顺序(drawable-1280x720----drawable-xhdpi-----drawable)执行了,效果更不好(总之android的适配就是坑啊)。
献花(0)
+1
(本文系一剑飘雪201...首藏)