如何以编程方式将 VectorDrawable 设置为 ImageView 的图像
Posted
技术标签:
【中文标题】如何以编程方式将 VectorDrawable 设置为 ImageView 的图像【英文标题】:How to set VectorDrawable as an image for ImageView programmatically 【发布时间】:2017-04-27 03:38:04 【问题描述】:我想在 android Studio 中将一些 vectorDrawables 设置为 ImageView。
我可以轻松设置 png 和 jpg drawable,但是当我想设置 VectorDrawable 时,它不适用于 imageview。
img.setImageResource(R.drawable.ic_home);
ic_home 是 VectorDrawable,此代码不起作用。
【问题讨论】:
阅读blog.stylingandroid.com/vectordrawables-part-1 我已经在这里回答了,希望对您有所帮助。您现在可以更改矢量可绘制对象。 ***.com/a/42281780/4517450 【参考方案1】:根据官方android developer blog,vectorDrawables 在运行时的 setImageResource() 方法没有变化。
如果您在运行时更改可绘制对象,您将能够使用 相同的 setImageResource() 方法和以前一样 - 那里没有变化。使用 AppCompat 和 app:srcCompat 是将矢量绘图集成到您的最简单的方法 应用程序。
有关更多详细信息,请查看 Google Developer 撰写的这篇精彩文章 AppCompat — Age of the vectors。
【讨论】:
【参考方案2】:如果您担心向后兼容性,那么您应该使用AppCompatImageView
而不是图像视图。浏览下面的代码。
<android.support.v7.widget.AppCompatImageView
android:id="@+id/iv_about"
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
app:srcCompat="@drawable/ic_vector_image"
/>
java
AppCompatImageView image = (AppCompatImageView) findViewById(R.id.iv_about);
image.setImageResource(R.drawable.ic_vector_image);
下面的代码需要在build.gradle中添加
android defaultConfig vectorDrawables.useSupportLibrary = true
它将服务于 app:srcCompat 的视角。
【讨论】:
不需要,根据文档“这将在您在布局中使用 ImageView 时自动使用,并且***活动/对话框由 appcompat 提供。您应该只需要手动使用编写自定义视图时的此类。”所以除非你扩展它,否则你可以只使用 ImageView。 @user924 我没有指定只要Activity扩展了AppCompatActivity就可以使用ImageView。如果你没有,就像你说的那样。【参考方案3】:如果您想使用矢量可绘制对象(小于或大于 API 21),只需执行以下操作:
以编程方式设置图像(例如在您的活动中):
imageView.setImageResource(R.drawable.ic_left_arrow_blue);
或通过 XML:
app:srcCompat="@drawable/your_vector_name"
在您应用的build.gradle
中,您需要包含:
android
defaultConfig
vectorDrawables.useSupportLibrary = true
对于低于 API 21 的矢量支持,将以下内容添加到 onCreate
:
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
【讨论】:
仍然不适用于 KitKat,仅适用于 >= 5.1 它适用于setImageResource
对于 KitKat 这仅适用于 ***.com/a/35918375/7767664
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);解决了我在 Kitkat 上的问题【参考方案4】:
我在回收站视图中有一个矢量,我正在使用img.setImageResource(R.drawable.ic_home)
,它无法正常工作,就像在回收站视图的某些项目中形成的其他图像一样。然后我用了img.setImageDrawable(activity.getResources().getDrawable(R.drawable.ic_home))
这个工作。
【讨论】:
【参考方案5】:使用这个:
android.support.v7.widget.AppCompatImageButton,
android.support.v7.widget.AppCompatImageView,
android.support.v7.widget.AppCompatTextView
而不是ImageButton
、ImageView
等。
如果使用矢量类型的图像。主要用于自定义视图。
【讨论】:
【参考方案6】:对于那些想要以编程方式加载矢量可绘制对象以用于其他用途的人,例如设置 drawableLeft 或其他方式,您可以使用:
Drawable drawable = AppCompatResources.getDrawable(context, drawableRes);
上下文是 AppCompatActivity。
【讨论】:
谢谢,我以前没见过这个 AppCompatResources 的东西。每个 SDK 版本都会使情况变得更糟。【参考方案7】:Java 代码使用:
formate_img.setImageResource(R.drawable.ic_text);//ic_text is a Vector Image
对于 XML 使用:
<android.support.v7.widget.AppCompatImageView
android:id="@+id/search_btn"
android:layout_
android:layout_
android:layout_marginTop="20dp"
android:layout_weight="1"
ads:srcCompat="@drawable/ic_barcode" //for Vector Image
tools:ignore="VectorDrawableCompat" />
【讨论】:
【参考方案8】:从你的drawable文件夹中删除两个文件夹,然后重建你的项目,它将正常工作
【讨论】:
以上是关于如何以编程方式将 VectorDrawable 设置为 ImageView 的图像的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Android的VectorDrawable类绘制矢量图
Android开发 VectorDrawable 矢量图 矢量图动画放入到一个xml文件中