gpt4 book ai didi

android - 为什么我的矢量可绘制缩放不符合预期?

转载 作者:IT老高 更新时间:2023-10-28 13:08:55 27 4
gpt4 key购买 nike

我正在尝试在我的 Android 应用中使用矢量绘图。来自 http://developer.android.com/training/material/drawables.html (强调我的):

In Android 5.0 (API Level 21) and above, you can define vector drawables, which scale without losing definition.

使用这个drawable:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/colorPrimary" android:pathData="M14,20A2,2 0 0,1 12,22A2,2 0 0,1 10,20H14M12,2A1,1 0 0,1 13,3V4.08C15.84,4.56 18,7.03 18,10V16L21,19H3L6,16V10C6,7.03 8.16,4.56 11,4.08V3A1,1 0 0,1 12,2Z" />

还有这个 ImageView:

<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:src="@drawable/icon_bell"/>

在尝试以 400dp 显示图标时产生此模糊图像(在运行 Lollipop 的 2015 年左右的较大高分辨率移动设备上):

blurryBellIcon

将可绘制矢量定义中的宽度和高度更改为 200dp 显着改善了 400dp 渲染大小的情况。但是,将其设置为 TextView 元素的可绘制对象(即文本左侧的图标)现在会创建一个巨大的图标。

我的问题:

1) 为什么矢量可绘制对象中有宽度/高度规范?我认为这些的全部意义在于它们可以无损地放大和缩小,使得宽度和高度在其定义中毫无意义?

2) 是否可以使用单个矢量可绘制对象,它在 TextView 上用作 24dp 可绘制对象,但也可以很好地扩展以使用更大的图像?例如。如何避免创建多个不同大小的矢量可绘制对象,而是使用一个可以缩放到我的渲染要求的​​对象?

3) 如何有效使用width/height属性,与viewportWidth/Height有什么区别?

其他细节:

  • 设备正在运行 API 22
  • 将 Android Studio v1.5.1 与 Gradle 版本 1.5.0 结合使用
  • list 是编译和目标级别 23,最低级别 15。我也尝试将最低级别移动到 21,但这没有任何区别。
  • 反编译 APK(最低级别设置为 21)会在可绘制文件夹中显示单个 XML 资源。不会生成光栅化图像。

最佳答案

这里有关于这个问题的新信息:

https://code.google.com/p/android/issues/detail?id=202019

看起来像使用android:scaleType="fitXY" 将使其在 Lollipop 上正确缩放。

来自 Google 工程师:

Hi, Let me know if scaleType='fitXY' can be a workaround for you , in order to get the image look sharp.

The marshmallow Vs Lollipop is due to a special scaling treatment added into marshmallow.

Also, for your comments: " Correct behavior: The vector drawable should scale without quality loss. So if we want to use the same asset in 3 different sizes in our application, we don't have to duplicate vector_drawable.xml 3 times with different hardcoded sizes. "

Even though I totally agree this should be the case, in reality, the Android platform has performance concern such that we have not reach the ideal world yet. So it is actually recommended to use 3 different vector_drawable.xml for better performance if you are sure you want to draw 3 different size on the screen at the same time.

The technical detail is basically we are using a bitmap under the hook to cache the complex path rendering, such that we can get the best redrawing performance, on a par with redrawing a bitmap drawable.

关于android - 为什么我的矢量可绘制缩放不符合预期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34936590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com