我如何确定Android需要什么尺寸(以像素为单位)才能在设备上正确显示该图像?

net*_*501 13 android pixel density-independent-pixel

我想在我的应用程序中显示两个图像.

第一张图片是全屏(作为应用程序的背景).我已多次阅读developer.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
Run Code Online (Sandbox Code Playgroud)

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

它在我的手机上看起来很棒.我看不到任何文物.它似乎也适用于1280x800 @ mpdi屏幕的仿真器,所以希望它能在所有设备上运行......

有没有人看到这样做的问题?有一个更好的方法吗?我的计算看起来是否正确?

JRo*_*wan 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
Run Code Online (Sandbox Code Playgroud)