【问题标题】:Bitmap in Android: Size of resources for displaying as 50dpAndroid中的位图:显示为50dp的资源大小
【发布时间】:2012-02-02 20:46:00
【问题描述】:

我想要在我的应用程序中显示一个 PNG 图像。

在布局文件 (.xml) 中,我将宽度和高度设置为 50dp(与密度无关)。但是我的资源(.png)文件的大小应该是多少?

我想过这个(根据密度比计算):

  • ldpi 资源:38
  • mdpi 资源:50(基础)
  • hdpi 资源:75
  • xhdpi 资源:100

或者“/res/drawables”中的一个 50px 宽的 png 文件是否足够?

【问题讨论】:

    标签: android image resources size png


    【解决方案1】:

    您必须创建 4 个图像。 mdpi 将是基线,这意味着 mdpi 是 100%。其他人遵循这个公式:

    将每个图像放在正确的资源文件夹中,drawable-ldpidrawable-mdpidrawable-hdpidrawable-xhdpi。 Android 会根据当前设备选择合适的drawable。

    那么,在你的布局中只需wrap_content你的宽度和高度,就不需要指定任何固定大小:

    <ImageView
        android:src="@drawable/my_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    

    【讨论】:

    • 非常感谢!您将 mdpi 作为基准的来源是什么?为什么不是hdpi?
    • android 本身就是这样设计的。 1dpi 等于 160dpi 配置上的 1px(物理像素),这是 mdpi 的参考值。这就是为什么 mdpi 是基线。他们采用这种约定的原因是第一款 android 设备(G1)具有 HVGA 中等 dpi 屏幕。
    • Android 文档在这里讨论了基线:developer.android.com/guide/practices/…
    • 谢谢!你(两个)帮了我很多!很明显,160dpi 的中等密度(正常尺寸)显示器使 1dpi 等于 1px。但是对于具有 170dpi 或类似值的显示器,情况又如何呢?您不能说每个 mdpi 显示器都是 160dpi(分辨率可能在给定范围内有所不同)。而且由于您可以在 Cata 的答案中看到的公式,170dpi 使 1px 不等于 1dpi。
    【解决方案2】:

    只有一张图片是不够的。您必须在每个资源文件夹中放置不同的图像(drawables-ldpidrawables-mdpidrawables-hdpidrawables- xhdpi)。

    请注意50dp 不等于50px

    你可以利用这个公式:

    px = dp * (dpi / 160)

    您可以找到其他有用的提示here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2016-04-11
      • 2011-06-26
      • 2014-07-06
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多