关于Android图片和资产大小


86

我需要澄清一些关于我的应用的图片资源的疑问,

如果我在xml文件中指定[图片视图]的高度为50度

我应该从资源文件夹中选择哪种类型的屏幕?

drawable, hdpi, ldpi, mdpi, xhdpi,

具有50像素的高度图像,

与基本图像相比,较大,较小尺寸的图像所占的百分比是多少,

就像在iOS中,@ 2x实际上是图像大小的2倍,而您以编程方式说是正常大小,

谢谢!


1
您的问题在Android手册中得到了解释:developer.android.com/guide/practices/screens_support.html
Marcin Orlowski 2012年

Answers:


373

mdpi是参考密度-即mdpi显示器上的1 px等于1倾角。资产缩放比例为:

ldpi | mdpi | tvdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
0.75 | 1    | 1.33  | 1.5  | 2     | 3      | 4

tvdpi除非您是专门为Google TV或原始Nexus 7开发的,否则您不必担心,但即使Google也建议您仅使用hdpi资产。

这意味着如果您正在处理48dip图像并计划最多支持xxhdpi resolution,则应从144px图像开始(如果您希望本机资产用于xxxhdpi,则应为192px),并为密度创建以下图像:

ldpi    | mdpi    | tvdpi    | hdpi    | xhdpi     | xxhdpi    | xxxhdpi
36 x 36 | 48 x 48 | 64 x 64  | 72 x 72 | 96 x 96   | 144 x 144 | 192 x 192

只要将它们放置在密度特定的文件夹(例如,等)中drawable-xhdpi,它们在任何设备上的显示尺寸都应大致相同drawable-hdpi

作为参考,这些像素的密度为:

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640

32
这是我在任何地方在线都能看到的最简单的解释。我从字面上看是在我的设计师工作站上标记了它
James andresakis

10
哈哈,太好了!:P也刚刚添加了XXHDPI的信息。
凯文·科波克

您如何确定必须从48dip开始?假设您手头只有一台平板电脑(mdpi),您是否从随机尺寸开始,然后进行迭代直到看起来“足够大”?
phtrivier 2015年

@phtrivier这只是我用作示例的大小。在这种情况下,它是启动器图标的大小。其他资产所需的大小取决于您的用例。
凯文·科波克

1
我还制作了一个工具来进行动态计算:pixit-tool.web.app/#
wdavies973

22

根据kcoppock的回答,我创建了以下shell脚本,以自动将所有图像调整为正确的大小,并将它们复制到相应的Android drawable- *-文件夹中!

创建一个shell脚本并粘贴以下代码:

createAndroidImages.sh

#!/bin/bash

read -p "Please enter the subfolder of the original images? " folder
read -p "How many DP (width) should the image have? " dp

for i in $(find $folder/. -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done

mkdir drawable-ldpi
mkdir drawable-mdpi
mkdir drawable-tvdpi
mkdir drawable-hdpi
mkdir drawable-xhdpi
mkdir drawable-xxhdpi
mkdir drawable-xxxhdpi

cp $folder/* drawable-ldpi/
cp $folder/* drawable-mdpi/
cp $folder/* drawable-tvdpi/
cp $folder/* drawable-hdpi/
cp $folder/* drawable-xhdpi/
cp $folder/* drawable-xxhdpi/
cp $folder/* drawable-xxxhdpi/

sips -Z $(echo $dp*3/4 | bc) drawable-ldpi/*
sips -Z $(echo $dp | bc) drawable-mdpi/*
sips -Z $(echo $dp*4/3 | bc) drawable-tvdpi/*
sips -Z $(echo $dp*3/2 | bc) drawable-hdpi/*
sips -Z $(echo $dp*2 | bc) drawable-xhdpi/*
sips -Z $(echo $dp*3 | bc) drawable-xxhdpi/*
sips -Z $(echo $dp*4 | bc) drawable-xxxhdpi/*

将您的脚本放在一个文件夹中,并将原始图像放在一个子文件夹中,例如:

/
.. createAndroidImages.sh
.. originalImages/
....a123.png
....b456.png

在终端中运行shell脚本: sh createAndroidImages.sh

要将创建的图像直接复制到您的Android Studio项目中:

cp -R drawable-* ~/AndroidStudioProjects/ESCRating/app/src/main/res/

你完成了!希望这对某人有帮助!

PS请注意,原始图像的像素宽度至少应为dpi所需宽度的四倍(例如4(系数xxxhdpi)* 30dpi => 120px),以获得最佳效果。


4

kcoppock在解释Andorid屏幕密度方面做得很好。我只想补充一点关于原始问题。

Android Tablet启动器图标使用了一个密度桶。

根据Google开发人员Nick Butcher在Google+上的帖子

Nexus 10的华丽屏幕落入XHDPI密度桶。在平板电脑上,启动器使用一个密度桶中的图标[0]使其稍大一些。为确保启动器图标(可能是应用程序中最重要的资产)清晰可见,您需要在drawable-xxhdpi或drawable-480dpi文件夹中添加144 * 144px图标。

在此处查找源


1

这是我对android-图像进行放大和缩小的计算

ldpi(120 dpi,低密度屏幕)-36px x 36px (0.19)(1)

mdpi(160 dpi,中密度屏幕)-48px x 48px (0.25)(1.33)

hdpi(240 dpi,高密度屏幕)-72px x 72px (0.38)(2)

xhdpi(320 dpi,超高密度屏幕)-96px x 96px (0.5)(2.67)

xxhdpi(480 dpi,超高密度屏幕)-144px x 144px (0.75)(4)

xxxhdpi(640 dpi,超高密度超大屏幕)-192px x 192px (1.0)(5.33)

当有多个图像时,我的短文有助于使用imagemagick创建图像资源。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.