关于Android图片和资产尺寸

时间:2012-07-20 14:46:30

标签: android android-resources android-image android-screen-support

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

如果我在xml文件中指定某事物[图像视图]的高度为50倾角

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

drawable, hdpi, ldpi, mdpi, xhdpi,

拥有50像素高度的图像,

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

像在iOS中一样,@ 2x,实际上是图像大小的2倍,并且以编程方式表示正常大小,

谢谢!

4 个答案:

答案 0 :(得分:367)

mdpi是参考密度 - 即mdpi显示屏上的1 px等于1 dip。资产扩展的比率是:

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-xhdpidrawable-hdpi等),这些设备应在任何设备上显示大致相同的尺寸。

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

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

答案 1 :(得分: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/

你已经完成了!希望这有助于某人!

P.S。请注意,原始图像的宽度至少应为dpi的四倍,而不是dpi所需的宽度(例如4(因子xxxhdpi)* 30dpi => 120px),以获得最佳效果。

答案 2 :(得分:4)

kcoppock在解释Andorid屏幕密度方面表现出色。 我只想再提一点关于原始问题。

Android平板电脑启动器图标使用一个密度桶。

根据谷歌开发者Nick Butcher的Google+帖子

  

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

查找来源here

答案 3 :(得分: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)

当有多个图片时,

My short article有助于使用imagemagick创建图片资源。