我正尝试在我的Android应用中使用矢量图。从http://developer.android.com/training/material/drawables.html(重点在于我):
在Android 5.0(API Level 21)及以上版本,您可以定义可缩放而不失真的矢量图。
使用此可绘制对象:
<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"/>
在尝试在一部2015年左右的高分辨率移动设备(运行Lollipop)上以400dp显示图标时,会产生这种模糊的图像:
将可缩放矢量图的定义中的宽度和高度更改为200dp可以显著改善400dp渲染大小时的情况。但是,将其设置为TextView元素的绘制对象(即文本左侧的图标)现在会创建一个巨大的图标。
我的问题:
1)为什么向量可缩放图的定义中有宽度/高度规格?我认为这些的整个目的是通过不失真地缩放来使宽度和高度在其定义中毫无意义?
2)是否可能使用单个可缩放矢量图作为TextView上的24dp绘制对象,但也能很好地缩放以使用更大的图片?例如,如何避免创建多个不同大小的可缩放矢量图,而是使用一个可进行渲染要求缩放的矢量图?
3)如何有效地使用width/height属性,并且与viewportWidth/Height有什么区别?
其他细节:
- 设备运行API 22
- 使用Android Studio v1.5.1和Gradle版本1.5.0
- 清单是编译和目标级别23,最小级别为15。我还尝试将最小级别移动到21,但这没有任何改变。
- 反编译APK(将最小级别设置为21)显示在drawable文件夹中只有一个XML资源。不生成栅格化图像。
drawable-anydpi-v21
的原因是我的minSdkVersion
小于 21。如果将minSdkVersion
设置为小于 21,是否会有任何行为变化?如果将 XML 移动到drawable-anydpi
中呢?我不认为会有任何变化,但我也希望您的矢量图像能够正确缩放... - Cory Charltondrawable-anydpi-v21
中有一个单独的xml文件,其中包含不同分辨率的mdi/hdpi等光栅化图像文件夹。但最终呈现的结果没有变化。 - Chris Knight