我该如何确定Android设备正确显示图片所需的像素大小?

13

我有两张图片想在我的应用程序中显示。

第一张图片是要全屏显示的(作为应用程序的背景)。我已经多次阅读了developers.android.com上的“支持多个屏幕”文章,但我仍然不确定每个dpi类别的图片应该是什么大小。我尝试了我认为正确的大小,但是在更大的屏幕上查看应用程序时(例如1280x800@mdpi),我发现背景出现了像素化。这是可以理解的,因为我mpdi的图像为320x480px。我该如何纠正这个问题?我应该使用什么大小的图片?

第二张图片是一个按钮。目前,我将图片设置为非常高的分辨率,但是应用程序会将其缩小以使其看起来很好。但是,当发布应用程序时,我不希望它这样。对于此图像,我需要知道像素的大小应该是多少。当前在应用程序中为60dp x 50dp。这将转换为多少像素?我知道要使用公式px = dp *(dpi / 160),但在这种情况下dpi将是多少?我无法使用NinePatch PNG进行这个图像。

我不明白首先要制作我的图片的大小(以像素为单位),以便它们在Android设备上正确显示。如果您在mdpi设备上,dp = px吗?

更新:

经过数小时的纠结,我想到了以下解决方案:

drawable-xlarge-xhdpi   2560x1920px
drawable-large-xhdpi    1920x1440px
drawable-normal-xhdpi   1280x960px

drawable-xlarge-hdpi    1920x1440px
drawable-large-hdpi     1440x1080px
drawable-normal-hdpi    960x720px

drawable-xlarge-mdpi    1280x960px
drawable-large-mdpi     960x720px
drawable-normal-mdpi    640x480px

drawable-xlarge-ldpi    960x720px
drawable-large-ldpi     720x540px
drawable-normal-ldpi    480x360px

这些将是我的可绘制目录和我期望的每个目录的最大分辨率(我决定不支持小屏幕)。因此,我的图像将是这些尺寸。

在我的手机上看起来很棒。我没有看到任何伪影。在模拟器上,1280x800@mpdi 的屏幕也似乎可以工作,所以希望它能在所有设备上运行......

有人发现用这种方法存在问题吗?有更好的方法吗?我的计算是否正确?


我很乐意获得小屏幕的尺寸,因为我试图支持我的应用程序旧手机(我讨厌技术过时)。 - Vincent Cantin
2个回答

2

这是你需要的内容,我从这里得到了它,现在将其传递给你。

xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp
Generalised Dpi values for screens:

ldpi Resources for low-density (ldpi) screens (~120dpi)
mdpi Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi Resources for high-density (hdpi) screens (~240dpi).
xhdpi Resources for extra high-density (xhdpi) screens (~320dpi).
Therefore generalised size of your resources (assuming they are full screen):

ldpi
Vertical = 426 * 120 / 160 = 319.5px
Horizontal = 320 * 120 / 160 = 240px
mdpi
Vertical = 470 * 160 / 160 = 470px
Horizontal = 320 * 160 / 160 = 320px
hdpi
Vertical = 640 * 240 / 160 = 960px
Horizontal = 480 * 240 / 160 = 720px
xhdpi
Vertical = 960 * 320 / 160 = 1920px
Horizontal = 720 * 320 / 160 = 1440px

px = dp*dpi/160

好的,这有点帮助,谢谢。但是,正如我所说的,在1280x800@mdpi设备上查看图像会出现像素化的情况。我已经使用320px x 480px作为mdpi。那么,为什么它看起来还是像素化的呢? - netman74501
我在思考,我去看看周围,也许其他人会提供一些意见。 - JRowan
谢谢并祝好运。我已经寻找这个答案相当长的时间了。事实上,在拖延这个问题的同时,我已经完成了应用程序的其余部分。这是我必须克服的最后一道障碍。 - netman74501
尝试将其设置为1280X800,查看是否会出现像素化问题。 - JRowan
我考虑过这个。但是,如果还有其他设备具有奇怪的dpi和像素混合,我该如何考虑它们?如果我知道每个不符合dpi与像素正常类别的设备,我可以使用Alex的建议。 - netman74501
显示剩余6条评论

0
使用JRowan答案中的方法,您可以将所需的图像添加到res文件夹中的“特殊”屏幕中,如下所示:
res/drawable-xlarge-mdpi/background.png

或者

res/drawable-sw600dp-mdpi/background.png
...

我能看到一个小问题。最好的方法是提供基准大小 - 如JRowan的答案中所述,作为mdpi,所有其他密度都按以下比例缩放: 0.75 ldpi 1.5 hdpi 2 xhdpi - Alex
您的mdpi和ldpi尺寸应为320x480和240x320。根据此基础缩放其他ldpi和mdpi尺寸,hpdi和xhdpi似乎很好。 - Alex
如果您发现这些评论或答案中有任何有用的内容,请投票支持。 - Alex
这个网站告诉我投票需要15点声望... 我想把一个答案标记为最佳答案,但是两个答案都对我有帮助,所以我不确定该选择哪一个标记。 - netman74501
也许这个问题已经被遗忘了,但对于寻找答案的新手来说,你的图像会被拉伸以改变原始的HxW比例,这是否重要呢?换句话说,如果在不同的设备上填充整个屏幕,比如d1是4x3,d2是5x3,那么图像看起来会变形。 - robkriegerflow
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接