安卓 - 在摩托罗拉设备上支持矢量图形绘制

5

我在摩托罗拉的旧版本手机上渲染矢量图标时遇到了问题。我在Moto G和其他搭载KitKat的设备上进行了测试。每次启动应用程序时,一些图标会显示不完整或出现损坏。而且每次启动后它们的错乱程度都不同。在联想、三星、AOSP模拟器和其他从JB+到Nougat的设备上都没有问题。只有摩托罗拉手机无法很好地渲染支持库中的矢量图标。有人遇到了相同的问题吗?


2
请发布您的代码,展示如何添加向量。 - Lokesh
已经有这个问题的答案了 https://dev59.com/klsW5IYBdhLWcg3w8q_2 - Lokesh
您是否有一个小的矢量可绘制的示例来展示这些问题?矢量可绘制的设备特定问题有很多,包括科学计数法和小数值没有前导零。最新的Android Studio 3.0预览版中的linter应该会指出其中一些问题。 - kabuko
你正在从SVG导入矢量可绘制对象吗? - VK.N
是的,我正在从svg导入它,并且没有警告。 - Mykhailo Yuzheka
显示剩余2条评论
5个回答

2

矢量图形也支持像TextView的drawableLeft属性这样的情况。 请访问此链接Android Studio 1.4

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/icon"

https://medium.com/@ferrand.d/can-you-and-should-you-use-vector-drawables-a-cheatsheet-32a2e1cc2ecf - AmmAr Yasser

2

尝试在您的Application类的onCreate()方法中添加以下内容:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

来自官方文档:

启用此功能后,AppCompat 可以拦截一些框架中的可绘制物填充,使 DrawableContainer 资源中的矢量可绘制物隐式填充。
您可以在 ImageView 的 android:src 或 TextView 的 android:drawableLeft 等位置使用这些可绘制物。
此功能默认禁用,因为启用它可能会导致内存使用问题,并且更新配置实例时可能会出现问题。
如果您手动更新配置,则可能不想启用此功能。请注意。


1
在我的研究中,我发现了两种在低于Android 5.0版本的设备上支持矢量图的方法。您可以尝试这样做。
您可以使用AppCompatImageView来支持所有设备的矢量图。
<android.support.v7.widget.AppCompatImageView
                app:srcCompat=""    // your drawable declaration
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

android.support.v7.appcompat:srcCompat

将一个可绘制对象设置为此ImageView的内容。在旧版本平台上运行时,允许使用矢量可绘制对象。

需要支持库23.4.0或更高版本

来源: https://developer.android.com/reference/android/support/v7/widget/AppCompatImageView.html#attr_android.support.v7.appcompat:srcCompat

另一种方法是通过Gradle配置矢量可绘制对象设置。在Gradle中包含以下代码。

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  

在你的ImageView中使用srcCompat
<ImageView  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  app:srcCompat="@drawable/ic_add" /> 

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

希望对您有所帮助 :)


0
如果您想在ImageView中使用矢量图,应该使用srcCompat-AppCompatImageView。但是,如果您想在drawableLeft中使用矢量图,请使用这个库https://github.com/bsobe/vectorview

0

试试这个:-

Drawable date = AppCompatResources.getDrawable(itemView.getContext(), R.drawable.ic_date_range_black_24dp);
etDeliveryDate.setCompoundDrawablesWithIntrinsicBounds(date, null, null, null);

@user3280437 你从xml中删除了src或srcCompat的drawable路径吗? - Lalit Jadav
你的意思是什么? - Mykhailo Yuzheka
@user3280437 我刚刚说的是移除 app:srcCompat="" 或者 src - Lalit Jadav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接