高/低/中分辨率的图形尺寸

24

我有一个尺寸为300*90的按钮图片,那么hdpi/mdpi/ldpi的尺寸应该是多少?谢谢。


请参考http://developer.android.com/guide/practices/screens_support.html(见表1)。DPI是一个转换因子。如果不知道您想要的按钮大小,这个问题就无法回答。 - Marc B
4个回答

62

谷歌建议使用

3:4:6:8:12:16缩放比例用于

ldpi:mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi。 例如:

  • 36x36 用于低密度
  • 48x48 用于中等密度
  • 72x72 用于高密度
  • 96x96 用于超高密度
  • 144x144 用于超超高密度
  • 192x192 用于超超超高密度

在您的示例中,如果提到的按钮尺寸是hdpi,则正确的尺寸应为:

  • 150x45 ldpi
  • 200x60 mdpi
  • 300x90 hdpi
  • 400x120 xhdpi
  • 600x180 xxhdpi
  • 800x240 xxxhdpi

8
补充一点,ldpi:mdpi:hdpi:xhdpi:xxhdpi = 3:4:6:8:12。 - Adil Malik
谢谢,我会在谷歌文档更新后尽快添加。 - Andrejs Cainikovs
我从Android SDK在每个密度文件夹中生成的ic_launcher图标中计算出了这个比率。虽然它还没有被记录在任何地方,但几乎可以认为是真实的 :-) - Adil Malik
计算公式是什么?请原谅我的愚蠢问题,但请回答 :) - AZ_

5
如果您希望在320x480(HVGA)画布上以300x90的尺寸显示该图形,则需要根据所设计设备屏幕的大小,正确设置像素尺寸以适用于MDPI设备,并且需要以下图像:
- LDPI:225x68px - MDPI:300x90px - HDPI:450x135px
LDPI的比例为MDPI的75%,而HDPI的比例为MDPI的150%。例如,如果您在480x800(WVGA)画布上设计了该图形,则其尺寸已经适用于HDPI,您需要将其他两个图像缩小到以下尺寸:
- LDPI:150x45px - MDPI:200x60px - HDPI:300x90px
希望这能帮助到您!

1

完整公式创建所有资产文件夹图像

首先,您必须决定为哪个DPI创建图像,一旦确定并创建图像,然后根据 Google指南使用以下代码。

public class DPICalculator {

    private final float LDPI = 120;
    private final float MDPI = 160;
    private final float HDPI = 240;
    private final float XHDPI = 320;

    private final float BASE_DPI = MDPI;

    public static void main(String[] args) {
        DPICalculator cal = new DPICalculator();

        cal.calculateDPI_baseUnitPixel(300, 90, cal.HDPI);
    }

    private float densityWidth;
    private float densityHeight;

    public void calculateDPI_baseUnitPixel(float width, float height, float currentDensity) {

        densityWidth = getDensityPX(width, currentDensity);
        densityHeight = getDensityPX(height, currentDensity);

        this.calculateAllDP();
    }

    private float getDensityPX(float value, float currentDensity) {
        return (value / (currentDensity / BASE_DPI));
    }

    public void calculateDPI_baseUnitDPI(float width, float height, float currentDensity) {

        densityWidth = getDensityDPI(width, currentDensity);
        densityHeight = getDensityDPI(height, currentDensity);

        this.calculateAllDP();
    }

    private float getDensityDPI(float value, float currentDensity) {
        return (value * (currentDensity / BASE_DPI));
    }

    private void calculateAllDP() {
        // get all settings.
        float low_pw = densityWidth * (LDPI / BASE_DPI);
        float low_ph = densityHeight * (LDPI / BASE_DPI);

        float med_pw = densityWidth * (MDPI / BASE_DPI);
        float med_ph = densityHeight * (MDPI / BASE_DPI);

        float high_pw = densityWidth * (HDPI / BASE_DPI);
        float high_ph = densityHeight * (HDPI / BASE_DPI);

        float xhigh_pw = densityWidth * (XHDPI / BASE_DPI);
        float xhigh_ph = densityHeight * (XHDPI / BASE_DPI);

        System.out.println("LDPI " + low_pw + " x " + low_ph);
        System.out.println("MDPI " + med_pw + " x " + med_ph);
        System.out.println("HDPI " + high_pw + " x " + high_ph);
        System.out.println("XHDPI " + xhigh_pw + " x " + xhigh_ph);

    }
}

Result

LDPI 150.0 x 45.0
MDPI 200.0 x 60.0
HDPI 300.0 x 90.0
XHDPI 400.0 x 120.0

0

为此,您可以尝试我的工具,该工具专门用于缩放不同类型(png、jpg、gif、svg、psd、9-patch)的图像(单个或批处理)。使用高质量的缩放算法,并支持某些无损压缩工具,如pngcrush。有GUI和命令行界面。

https://github.com/patrickfav/density-converter

screenshot


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