Android图片自适应不同分辨率屏幕问题

转载 2014年06月17日 17:46:52

转:

android中图片适配是一件很棘手的事情,本篇文章详细的介绍屏幕显示的原理,为什么会资源文件中会存在

drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi等文件夹,为什么要使用dp作为单位等等。

首先从这两张图片的显示效果开始说起

  1. 这是一张200x200的图片在不同的手机上的显示效果。很明显第二张图片看上去要比第一张占用的空间小很多?这是为什么呢?

    这里我们引入 ppi (pixel per inch)名词,翻译过来就是每英寸的距离像素点的个数。现在来解释上面的现象。对于一张200x200像素的图片,我国我们想要显示在 200ppi 的手机上,那么占用屏幕的长和宽均为   200pix  /  (200pix / inch) = 1 inch  ,也就是说要占用 1 inch x 1 inch,如果要显示在 300ppi 的手机上,那么占用屏幕的长和宽均为  200pix  / (300pix / inch )  = 2/3 inch,也就是说对于 ppi越高的手机,单位inch上能够显示更多的像素点,因此当这两种手机显示同样多的像素点的时候,ppi 越高的手机占用的空间就越小。这就是我们想要图片在各种手机屏幕上都显示一致的效果时需要解决的问题。

  2. 既然这种效果不是我们想要的,怎么做才能获取一致的显示效果呢?下面介绍三种方法

    方法一:对每一中不同的ppi使用不同的图片,这需要我们先判断屏幕的ppi,再对图片进行处理,然后显示,显然比较麻烦。而且对于获取屏幕ppi这个参数android并没有提供给我们api调用。所以这种办法基本行不通

    方法二:  在用eclipse开发环境生成一个android项目后,系统会给我们生成drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi,drawable-xxhdpi,对于同一张图片资源,我们分别创建这五个版本来适应不同的屏幕。假设你想一张图片

    在 200ppi和400ppi的手机上显示的长和宽都是一样的为  1inch x 1inch,那么你就需要制作一张200x200的图片和一张

    400x400的图片,然后放入对应得drawable目录中就可以了。那么程序运行时怎么知道自己到底是使用哪个drawable目录下

    的图片呢?这个是不需要我们考虑的,而是手机厂商考虑的问题,只需要知道,程序会使用适应当前屏幕的目录下的图片

    资源。系统会根据屏幕的分辨率从这几个目录中获取图片。

    drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi,drawable-xxhdpi,这几个目录对应的pppi为

     120ppi  160ppi   240ppi    320ppi   480ppi ,也就是说如果屏幕的ppi为320,那么就会优先使用drawable-xhdpi目录下的

    图片资源。当然手机屏幕的ppi也是多种多样,例如有的是  300ppi,有的是220ppi,这个系统会选择最接近的目录,也就

    是 300ppi的手机会选择320ppi对应的drawable目录下的资源

    方法三:方法2中需要为每个drawable目录都生成对应的图片版本,如果图片较多的话,生成不同版本的图片倒是小事更主要的缺点是会增大应用的大小,那么可不可以只在一个目录下存放图片,例如只在drawable-mdpi目录下存放图片呢答案是可以的,假设我们在drawable-hdpi(对应的ppi为160ppi)目录下存放了一个100X100的图片,那么当图片需要

    在320ppi的android设备上进行显示时,android系统会将自动将图片进行处理生成一个200X200的图片显示到设备上,那么他们占用的空间大小分别为  100/160  = 3/5  inch     200/320 = 3/5 inch  可以看出他们占用的长和宽都是一样的这种自动缩放的优点是只需要一张图片就能适应各种ppi类型的屏幕。缺点是当对100X100的图片进行变换成200X200的图片时肯能会造成图片的不清晰,如果提供一个drawable-xhdpi下的图片资源,图片较多的话会无形增加应用的大小,所以说如何进行选择也是一个衡量。建议是将比较重要的图片资源提供多个版本(当android设备和自己的ppi相对应的drawable下找到想要的资源时,就不会再到其他目录需找资源)。不是很重要的图片资源存储一个版本,让系统根据自己的ppi自己对图片进行适当的缩放显示。

  3. 最后再说下为什么在布局文件中使用 dp作为单位而不是使用px

    dp是一个与屏幕ppi无关的参数,同时也是一个事实上并不存在的虚拟单位。显示时会根据具体屏幕的ppi进行像素的映射,关系如下160ppi   1dp   1px120ppi   1dp   0.75px240ppi 
    1dp   1.5px320ppi  1dp  2px因此在布局文件中一般使用dp作为单位,这样就能适应不同ppi的屏幕,在各种ppi的屏幕上有一样大的物理上的距离。(可以看出1dp并不总是等于1px的,对于ppi高的屏幕肯能要等于2px,只是为了物理上看起来的距离是相等的)

  4. 最后希望大家能够明白  我们经常说的分辨率和ppi的关系,其实他们是没多大关系。分辨率只是说明屏幕上有多少个像素点,这也跟屏幕大小有关系。当然对于屏幕大小相同的来讲  分辨率越高 ppi越大,如果脱离了屏幕的物理尺寸谈分辨率是没有任何意义的。就像平板的分辨率比手机的大,那是因为平板个大呀。从颜色显示的细腻程度上讲并不见得比手机强。



图片自适应不同分辨率屏幕

mImgView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,                        LayoutP...
  • u013260551
  • u013260551
  • 2014年06月12日 00:12
  • 411

如何在一台Android设备上模拟不同的屏幕大小和分辨率

在4.3之后,Android引入了wm shell命令,使用zhe'y
  • neoimale
  • neoimale
  • 2014年10月28日 17:27
  • 1380

android 图片大小如何设置可以自适应不同分辨率

Android为了适应不同的分辨率,需要将不同的图片放到不同的drawable目录下,分辨率的匹配规则如下: drawable-mdpi 320 * 480 drawable-hdpi 480*8...
  • qq_23174861
  • qq_23174861
  • 2016年06月27日 22:27
  • 344

Android自适应不同屏幕几种方法

由于Android设备的屏幕尺寸、分辨率差别非常大,如果希望我们的应用能够在不同屏幕尺寸或分辨率的Android设备上运行,即更换Android设备后界面和字体不会因此变得混乱,则需要考虑屏幕的自适应...
  • u012637501
  • u012637501
  • 2015年06月24日 10:50
  • 5123

Android 实现图片的自动缩放,适应分辨率不同的手机

以下代码可实现Android图片按照不同屏幕手机的大小 比例缩放。 1、定义 bitmap public Bitmap viewBg;// 背景图 2、给他图片资源 viewB...
  • redouba
  • redouba
  • 2014年03月21日 19:38
  • 1546

让背景图适应不同分辨率的设备和不同浏览器

单纯用图片铺满背景不重复方法1:body{ padding:0; margin:0; background:url(../images/vct.gif) 0 0 no-repeat scroll tr...
  • cmlddcml
  • cmlddcml
  • 2016年11月04日 16:34
  • 1690

Android 屏幕适配方案,自动生成不同分辨率的值

多分辨率适配方案,自动生成对应值,大家在Android开发时,肯定会觉得屏幕适配是个尤其痛苦的事,各种屏幕尺寸适配起来蛋疼无比。如果我们换个角度我们看下这个问题,不知道大家有没有了解过web前端开发,...
  • u014649598
  • u014649598
  • 2016年03月31日 10:52
  • 6414

android开发:在不同分辨率,不同屏幕密度dpi的平板上的字体大小和布局的自适应

最近在这家公司做一些android设备上的开发,使用了几款平板进行真机调试,面对不同分辨率,不同屏幕密度dpi的设备,碰到了一些和虚拟机不太一样的情况,在这里和大家分享一下。 1.一些名词的简单...
  • u010697537
  • u010697537
  • 2014年01月14日 13:46
  • 2971

Android 万能适配方案和UI屏幕适配 不同分辨率 最全面 最易懂的

屏幕尺寸 屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米(下面有图文介绍) 比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等 ...
  • WHB20081815
  • WHB20081815
  • 2017年08月08日 20:17
  • 1273

Android不同手机屏幕分辨率自适应

有必要了解的 Android中常见的单位 dip, dp, px, sp之间的区别: dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这...
  • XSL1990
  • XSL1990
  • 2013年11月25日 00:33
  • 35698
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android图片自适应不同分辨率屏幕问题
举报原因:
原因补充:

(最多只允许输入30个字)