关闭

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

759人阅读 评论(0) 收藏 举报

转自:

http://blog.csdn.net/xw568159764/article/details/31788107

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越大,如果脱离了屏幕的物理尺寸谈分辨率是没有任何意义的。就像平板的分辨率比手机的大,那是因为平板个大呀。从颜色显示的细腻程度上讲并不见得比手机强。



0
0
查看评论

[整理]Android屏幕适配(不同的屏幕分辨率和尺寸)

Android屏幕适配目录:Android屏幕适配 概念区分 换算关系 划分标准 Android手机常见尺寸和对应分辨率 部分Android测试机分析在实际开发过程中,会遇到不同的机型,为了让控件和布局要在不同屏幕上显示相近的样子,就得在drawable-ldpi/mdpi/hdpi/xhdpi/x...
  • TTKatrina
  • TTKatrina
  • 2016-02-02 11:43
  • 16048

(转)[整理]Android屏幕适配(不同的屏幕分辨率和尺寸)

原地址:http://blog.csdn.net/ttkatrina/article/details/50623043 Android屏幕适配 目录: Android屏幕适配 概念区分 换算关系划分标准 Android手机常见尺寸和对应...
  • duyiqun
  • duyiqun
  • 2017-02-13 22:43
  • 1036

自动生成Android不同分辨率下的图片

Android屏幕分辨率适配的图标处理比较麻烦,让UI做不同尺寸的图片也挺浪费时间的,并且容易出错,于是用Python写了个工具自动化处理图片,UI只需要做好1080*1920分辨率下的图片就可以了,其它分辨率的图片自动生成。import os.path import sys from PIL im...
  • offbye
  • offbye
  • 2015-11-24 14:43
  • 5709

Android获取真正准确的分辨率,拒绝那些瞎扯乱混的文章

最近因为android设备分辨率的问题被坑惨了,另一方面,公司的美术团队被我也坑惨了,虽然看起来问题不在我,但是这个锅该我来背,毕竟测试分辨率的代码是我写的。网上到处流传的都是各种getMetrics()方法,我也深信这种方法是对的,用了3种大体相同细节不同的方法来测,都得到同一个结果1280x67...
  • tc839706407
  • tc839706407
  • 2016-03-16 17:34
  • 1892

详解Android应用如何匹配不同的手机分辨率

从android sdk提供的帮助文档中,我们可以看到各种手机的分辨率和对应的屏大小:QVGA (240x320),WQVGA400(240x400),WQVGA432 (240x432),HVGA (320x480),WVGA800 (480x800),WVGA854 (480x854)。 然而...
  • LEEWENJIN
  • LEEWENJIN
  • 2014-07-15 21:42
  • 9284

Android不同分辨率和不同密度适配

官方原文地址:http://developer.android.com/training/multiscreen/screendensities.html 本文主要介绍: 1.dip dp sp 简单用法 2.适配不同分辨率屏幕图片的处理方法 支持不同的密度或分辨率 本课介绍如何通过提供不同的资...
  • jdsjlzx
  • jdsjlzx
  • 2015-06-04 20:29
  • 1915

Android屏幕适配(不同的屏幕分辨率和尺寸)

http://blog.csdn.net/ttkatrina/article/details/50623043 http://blog.csdn.net/ttkatrina/article/details/50623043 http://blog.csdn.net/ttkatrina/art...
  • u011904605
  • u011904605
  • 2016-10-15 00:43
  • 6537

关于Android的不同分辨率图片适配

看了几篇相关的博客,根据自己的实际开发,总结了一下。 首先要搞清楚,图片的分辨率单位是像素,也就是px,比如72x72的图片,就是长宽都是72px;手机屏幕的分辨率跟图片类似,但是它还有个很重要的指标:dpi,叫做像素密度,代表单位屏幕面积里面能够显示的像素数量(没记错的话是1平方毫米),其实说白了...
  • zm342021666
  • zm342021666
  • 2016-05-07 18:40
  • 4720

Android不同分辨率的Drawable资源配置

Android不同分辨率的Drawable资源配置
  • cb_smile
  • cb_smile
  • 2017-03-22 12:28
  • 1011

Android中,字体大小自适应不同分辨率,以及注意事项

今天有人问我,Android系统不同分辨率,不同大小的手机,字体大小怎么去适应呢?其实字体的适应和图片的适应是一个道理的。 一、 原理如下: 假设需要适应320x240,480x320分辨率。在res目录下新建文件夹values-320x240, values-480x320。然后在文件夹...
  • u012138032
  • u012138032
  • 2016-09-08 20:10
  • 5044
    个人资料
    • 访问:26991次
    • 积分:530
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:69篇
    • 译文:0篇
    • 评论:1条
    最新评论