Android 矢量资产:dp 测量是不是只对“包装内容”重要?

Posted

技术标签:

【中文标题】Android 矢量资产:dp 测量是不是只对“包装内容”重要?【英文标题】:Android Vector Assets: Do dp measurements only matter for "wrap content"?Android 矢量资产:dp 测量是否只对“包装内容”重要? 【发布时间】:2018-02-04 15:41:26 【问题描述】:

当我创建一个矢量可绘制对象时,我可以在dp 中设置它的大小。默认为 24​​dp x 24dp。

    如果我在应用程序中使用与 24dp x 24dp 大小不同的矢量,这些测量值是否对性能有影响?还有关于 21 岁以下的 API(我使用app:srcCompat 显示图像)。

    当使用较低的 API 并且系统将其缩小时,向量大小是否重要?

    除了我应用wrap_content时的默认尺寸之外,这些尺寸对我的使用是否重要?

【问题讨论】:

所以您只需要矢量图像大小进行测量或文本?如果你可以使用 compile 'com.intuit.sdp:sdp-android:1.0.4' 这个库进行放置测量。 我认为这可以帮助***.com/a/35930518/4252667 【参考方案1】:

我可能无法回答您的所有问题,但如果您没有通过支持库在棒棒糖前版本上使用矢量可绘制对象,那么 DP 大小肯定很重要。

要启用支持向量可绘制对象,您必须将以下内容添加到应用的 gradle 构建文件中:

android   
    defaultConfig   
        vectorDrawables.useSupportLibrary = true  
      

见https://android-developers.googleblog.com/2016/02/android-support-library-232.html

如果这不是您应用的构建文件的一部分,Android Studio 将为所有具有已定义 DP 大小的预棒棒糖版本生成 PNG。因此,如果您的矢量定义了 24dp 并且您将其用作 128dp 图形,那么它在棒棒糖之前的版本上很可能看起来不太好,因为将使用 24dp PNG。

生成的 PNG 可以在这里找到:

app\build\generated\res\pngs\...

反之,如果您的矢量是 128dp 并且您将其用作 24dp 图形,则按比例缩小的 PNG 图形也可能由于缩放而看起来不像预期的那样完美,并且您可能会因为 PNG 太大而浪费一些文件大小。

我从来没有真正研究过这对性能意味着什么......

【讨论】:

当然可以。我没有想到备用 PNG 一代。因此,本质上,如果您使用的是没有 PNG 后备的矢量可绘制对象,那么可绘制 XML 中的尺寸仅在您使用wrap_content 时才重要。谢谢!【参考方案2】:
    当您使用wrap_content 时,设备将以您想要的大小(24dp)渲染矢量。设置更大的尺寸会导致渲染更大的位图,这会影响您的 UI 和性能。如果您没有使用包装内容并且您使用的是矢量支持库,那么矢量大小应该无关紧要。 如果您设置vectorDrawables.useSupportLibrary = false,那么您的 apk 还将包含生成的矢量位图,用于 API 21 以下的设备。较大的位图需要更多时间来打开,使用更多内存并且还会增加您的 apk 的大小。如果您使用的尺寸大于 UI 所需的尺寸(系统会缩小尺寸),它也会影响性能,并可能会降低图像质量。 在#1 中回答,当您不使用wrap_content 时,如果您使用vectorDrawables.useSupportLibrary = true,则大小无关紧要

【讨论】:

以上是关于Android 矢量资产:dp 测量是不是只对“包装内容”重要?的主要内容,如果未能解决你的问题,请参考以下文章

在 API 19 上渲染矢量资产时 Android 应用程序崩溃在 API 20 以上运行良好

如何在android中将vw测量转换为dp?

将矢量绘制为XML中的imageview

在资产目录中切片 PDF 资源是不是损坏?

Android 开发 VectorDrawable 矢量图 使用渐变色设置图标颜色

Android 安装包优化Android 中使用 SVG 图片 ( SVG 矢量图简介 | Android 中生成 Vector 矢量图资源 )