【问题标题】:Graphic dimensions for hdpi/ldpi/mdpihdpi/ldpi/mdpi 的图形尺寸
【发布时间】:2011-11-22 19:05:05
【问题描述】:

我有一个尺寸为 300*90 的按钮图形。hdpi/mdpi/ldpi 的尺寸必须是多少?谢谢

【问题讨论】:

标签: android


【解决方案1】:

谷歌suggests使用

3 : 4 : 6 : 8 : 12 : 16 的缩放比例

ldpi : mdpi : hdpi : xhdpi : xxhdpi : xxxhdpi 相应地。示例:

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

在您的示例中,如果提到的按钮大小适用于 hdpi,则正确的尺寸应该是:

  • 150x45 ldpi
  • 200x60 mdpi
  • 300x90 高清画质
  • 400x120 xhdpi
  • 600x180 xxhdpi
  • 800x240 xxxhdpi

【讨论】:

  • 只是一个补充,ldpi:mdpi:hdpi:xhdpi:xxhdpi = 3:4:6:8:12
  • 谢谢,我会在 Google 记录此内容后立即添加。
  • 我根据 Android sdk 在每个密度文件夹中生成的 ic_launcher 图标计算了这个比率。它还没有在任何地方记录,但它仍然几乎是经过验证的:-)
  • 计算公式是什么?请原谅我的愚蠢问题,但请回答:)
【解决方案2】:

这取决于您设计该图形的设备屏幕尺寸。如果您希望它在 320x480 (HVGA) 画布上显示为 300x90,那么您的像素尺寸对于 MDPI 设备是正确的,并且您需要以下图像:

  • LDPI:225x68px
  • MDPI:300x90 像素
  • HDPI:450x135px

LDPI 是 MDPI 缩放的 75%,HDPI 是 MDPI 缩放的 150%。例如,如果您在 480x800 (WVGA) 画布上设计了这些图形尺寸,那么您的尺寸对于 HDPI 来说已经是正确的,您需要从那里缩小其他两个尺寸:

  • LDPI:150x45px
  • MDPI:200x60px
  • HDPI:300x90px

希望有帮助!

【讨论】:

    【解决方案3】:

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

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

    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);
    
        }
    }
    

    结果

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-01
        • 2011-09-04
        • 2018-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        • 1970-01-01
        相关资源
        最近更新 更多