Android图片适配,美工,开发一看都笑了

Android图片适配,美工,开发一看都笑了

编码文章call10242025-08-05 14:18:251A+A-

Android适配很烦人,看完本文你会认为图片适配很简单。

我们先不看任何讨厌的单位名词。

我们直接上图:

从以上实验简单的分析一个:

截图1,2是同一个手机,截图3,4 是同一个手机,可以从下方的density,desityDPI 等值可以看出来。

截图1 图片设置 64dp

截图2 图片设置 192px

截图3 图片设置 64dp

截图4 图片设置 192px

截图2 与 截图4: 两种屏幕,设置相同的px,显示的结果一定不同。

截图1 与 截图3: 两种屏幕,设置相同的dp(设备独立像素),显示的结果大致不同。

截图3 与 截图4: 使用设置单位不同,但最后结果一样。我们看到 density=3,64dp,192px,3个值存在一定关联:192px = 64dp * 3.0

用截图1 验证: 64dp * 1.5 = 96px , 所以得到关系( px = dp*density倍数 )=>( dp = px/density倍数)。

总结:

美术同学知道的是 px (像素),开发同学知道的是dp。而不同的屏幕的density不同,所以需要有一个基准,比如美术使用1080的屏做为出图依据,那么开发同学用的dp 就要根据1080来计算 dp = px / 3,因为1080屏的density是3.

举个例子,美术基于1080 出了一张图,要求上边距9px, 左边距3px, 图片宽高:120*90

因为 1080 的 density =3 , 设置的值,是上边距 9px/ 3 = 3dp 左边距3px/3 = 1dp, 图片宽高:120/3*90/3 = 40dp*30dp 。

美术要知道出图的基础尺寸,并给出在这个基础之上的一些像素值。

开发要知道这个基本对应的density 是多少,然后转化为dp.

其它的手机非1080的手机怎么处理,使用相同的dp,出来的像素不同,但效果基本一致。

hdip/xhdpi/xxhdpi/ 这些目录是干啥的?这些目录的目的主要是为了提供不同的图,以便订制在不同的屏上显示不同的图。每种dpi 对应该一种屏,如果对应的目录没有找到相应的图,就会向上到高分辨率的目录下找。

如540的手机,density=1.5,对应的目录是hdpi,如果hdpi中没有找到相应该的图片,系统会去 xhdpi中找,再找不到再向xxhdpi中找,都找不到就向下找.(算法是实验的,之后看代码验证)

我们目前的做法,为了减少资源,又能出来更好的效果,我们在放一份图片到xxhdpi中,也就是1080的。小屏幕会压缩,更大屏幕会拉伸。

下面梳理一下相应的名词:

分辨率:1080*1920

屏幕大小:对角线长度,4.0 , 5.0, 5.5

DPI : 每英寸的像素 = 对角线的分辨率 / 屏幕对角线长

DP : Android 开发使用的单位。

density: 密度比 主要是和标准的160dpi对比。如:1080p 的DPI = 480, 那么他对应的 density = 480/160 = 3

density 主要用于根据美术提供的基数进行 换算dp.

dp就是用在android 开发设置具体的

DPI 主要用来确定 手机对应到 drawable 的哪个目录里(hdip/xhdpi/xxhdpi),默认取哪个图。

图片要显示的大小,是由设置的长宽高决定的。如果设置wrap_content,那么系统会根据图片的大小,并设置单位为dp.如一张100px的图,真正显示到手机时,就会变成100dp.

以下代码用来取得系统相关值:

DisplayMetrics dm = new DisplayMetrics();

dm = getResources().getDisplayMetrics();

float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)

int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4