Android众说纷纭分辨率

简介:

Andoid最被人诟病的就是显示屏的各种不同尺寸和不同分辨率。由于Android厂商的纷繁多样,导致出现了不同尺寸和不同分辨率的手机,指示开发者需要兼容各种手机屏幕。本文想学习的就是Android的显示屏幕的各种名词。

打开手机参数,会看到这样的数据

Image(7)

尺寸

尺寸指的是屏幕对角线的长度。以英寸作为度量单位。

分辨率

分辨率指的是在长和宽上各有多少像素。用这个能知道宽高比,一般如果宽高比例是16:9,就是宽屏,4:3就是窄屏了。

我们平时说的VGA,HVGA,QVGA,WVGA,WQVGA是分辨率的概念:

VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素;  
HVGA:Half-size VGA;即:VGA的一半,分辨率为480×320;  
QVGA:Quarter VGA;即:VGA的四分之一,分辨率为320×240;  
WVGA:Wide Video Graphics Array;即:扩大的VGA,分辨率为800×480像素;  
WQVGA:Wide Quarter VGA;即:扩大的QVGA,分辨率比QVGA高,比VGA低,一般是:400×240,480×272

密度

指的是一英寸有多少像素点。

这里使用的单位有几个:dpi,ppi

ppi和dpi经常被混用,其实ppi才是正确的(pixel per inch),dpi(Dot Per inch)是在打印的时候才用到的。

比如上面那个手机参数中,密度是441ppi,则说明每1平方英寸的屏幕中有441*441个像素。

我们可以稍微做下计算,这个手机屏幕高有1920个像素,密度是441ppi,则高大致有1920/441 = 4.35 英寸,宽有1080/441 = 2.44英寸。那矩形对角线长度(尺寸)5^2 ~ 4.35^2 + 2.44^2

我们可以看到我们的res文件夹中保存的图片信息都是用dpi来做的,比如

drawable-hdpi

drawable-ldpi

drawable-mdpi

drawable-xdpi

hdpi就是高密度,mdpi中等密度,ldpi低密度,xdpi更高密度。

为什么这里要针对不同的密度做不同的资源划分呢?

因为图片大小是以像素来算的,比如一个图片是400*300,就是长宽占的像素。

想象下两个手机有同样的尺寸和宽高比,但是一个是高密度高分辨率的,一个是低密度低分辨率的。那么同样一个图片在高密度的手机上就会显示非常小,在低密度低分辨率手机上就会显示非常大。因此对不同密度设置不同的图片是很有必要的。

密度无关像素

我们一直都是用像素来做基本单位的,但是Android的大小分辨率不一,比如一个320的直线,在240*320的分辨率下正好放,但是在240*640的分辨率下只显示了一半,就是说这个图片展示实际和密度是相关的。因此Android引入了一个密度无关像素的概念。这是一个量词,dp或者叫dip(Density Independent Pixel)。它和像素并不是一一对应的,是有一个换算公式的。比如在160dpi密度的屏幕中(1英寸有160*160个像素),那么dp就和像素是等价的。如果说在320dpi密度的屏幕中,那么一个dp就相当于2个像素了。

使用dp的好处是什么呢?

好处就是如果在开发中,比如一条直线以dp作为单位,那么只要设置一次,就可以适配到多个屏幕了。

首先Android将分辨率与密度绑定起来,做了一个约定

Image(8)

即320*480分辨率的手机,它的密度必须设置为160dpi,那么它在宽上可以展示320个像素,也是320dp。对于480*800分辨率的在3寸到4寸手机呢,它的密度必须是240dpi,那么在宽上可以显示480像素,dp呢?160 / 240 * 480 = 320dp。也是可以显示320dp。所以如果在程序中设置一条直线为320dp,那么在不同分辨率下一样会占满了整个宽。

Android至今还有头疼的图片分辨率的问题就在于px和dp的转换上。我们的资源图片还是以px为单位,在转换成dp的过程中会出现各种问题。比如转换过程中的四舍五入的问题可能会导致图片的显示出现差异等。


本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/3181295.html,如需转载请自行联系原作者

相关文章
|
1月前
|
编解码 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)1
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)
62 1
|
1月前
|
编解码 开发工具 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
37 2
|
8月前
|
编解码 开发工具 Android开发
安卓端/iOS端如何播放4K分辨率的RTMP/RTSP流
4K分辨率即4096×2160的像素分辨率,它是2K投影机和高清电视分辨率的4倍,属于超高清分辨率。在此分辨率下,观众将可以看清画面中的每一个细节,每一个特写。影院如果采用惊人的4096×2160像素,无论在影院的哪个位置,观众都可以清楚的看到画面的每一个细节,影片色彩鲜艳、文字清晰锐丽,再配合超真实音效,这种感觉真的是一种难以言传的享受。
259 0
安卓端/iOS端如何播放4K分辨率的RTMP/RTSP流
|
8月前
|
编解码 Android开发
Android平台GB28181设备接入模块分辨率发生变化怎么办?
我们在做Android平台gb28181设备接入模块的时候,遇到这样的情况,比如横竖屏分辨率不锁定,采集摄像头的时候,可以实现,横屏状态采集横屏,竖屏状态采集竖屏,简单来说,横屏状态比如采集的1280*720的,竖屏状态,采集的数据源成了720*1280。
|
编解码 Android开发
Android 大分辨率 问题.(supports-screens)
Android 大分辨率 问题.(supports-screens)
82 0
|
编解码 Android开发
安卓编解码的分辨率问题
安卓编解码的分辨率问题
74 0
|
编解码 Android开发
适配完结篇二 - 谷歌小弟的Android多分辨率适配框架
• 切图存放于drawable-nodpi • 抛开系统的dpi并且摒弃dp和sp,统一使用px作为尺寸单位 • 按照给定高分辨率(如1920*1080)切图和布局, 其实只有1080px有参考价值 • 根据需要, 等比例缩放每个View 目前,xxhdpi分辨率的手机占了主流,所以在该框架中采用了drawable-xxhdpi的切图。倘若以后xxxhdpi分辨率的手机占了主导地位,那么就请UI设计师按照该分辨率切图,我们将其放在drawable-nohdpi中,再修改BASE_SCREEN_WIDTH即可。
193 0
|
编解码 程序员 开发工具
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(一)
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(一)
145 0
|
XML 编解码 Android开发
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(二)
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(二)
227 0
【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题(二)
|
编解码 Android开发 iOS开发
安卓端/iOS端如何播放4K分辨率的RTMP/RTSP流
关于4K分辨率 4K分辨率即4096×2160的像素分辨率,它是2K投影机和高清电视分辨率的4倍,属于超高清分辨率。在此分辨率下,观众将可以看清画面中的每一个细节,每一个特写。影院如果采用惊人的4096×2160像素,无论在影院的哪个位置,观众都可以清楚的看到画面的每一个细节,影片色彩鲜艳、文字清晰锐丽,再配合超真实音效,这种感觉真的是一种难以言传的享受。
1534 0