如何以编程方式将 VectorDrawable 设置为 ImageView 的图像

问题描述 投票:0回答:8

我想在 Android Studio 中将一些 vectorDrawables 设置为 ImageView

我可以轻松设置 png 和 jpg 可绘制,但是当我想设置 VectorDrawable 时,它在 imageview 上不起作用。

img.setImageResource(R.drawable.ic_home);

ic_home 是 VectorDrawable,此代码不起作用。

android imageview android-vectordrawable
8个回答
150
投票

如果您想使用矢量绘图(小于或大于 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);  

27
投票

对于那些想要以编程方式加载矢量可绘制对象以用于其他用途(例如设置drawableLeft或其他用途)的人,您可以使用:

Drawable drawable = AppCompatResources.getDrawable(context, drawableRes);

其中上下文是 AppCompatActivity。


18
投票

根据官方 android 开发者博客,矢量绘图运行时 setImageResource() 方法没有变化。

如果您在运行时更改绘图,您将能够使用 相同的 设置图像资源() 方法和以前一样 - 没有改变。使用 AppCompat 和 app:srcCompat 是将矢量绘图集成到您的应用程序中的最简单的方法 应用程序。

有关更多详细信息,请查看 Google Developer 撰写的这篇好文章 AppCompat — 向量的年龄


18
投票

如果您担心向后兼容性,那么您应该使用

AppCompatImageView
而不是图像视图。浏览下面的代码:

<android.support.v7.widget.AppCompatImageView
    android:id="@+id/iv_about"
    android:layout_width="150dp"
    android:layout_height="150dp"
    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的视角。


3
投票

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_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_weight="1"
        ads:srcCompat="@drawable/ic_barcode" //for Vector Image
        tools:ignore="VectorDrawableCompat" />

2
投票

我在回收器视图中有一个向量,我正在使用

img.setImageResource(R.drawable.ic_home)
,它不能正常工作,就像在回收器视图的某些项目中形成的其他图像一样。然后我用了
img.setImageDrawable(activity.getResources().getDrawable(R.drawable.ic_home))
,这有效。


0
投票

使用这个:

android.support.v7.widget.AppCompatImageButton, 
android.support.v7.widget.AppCompatImageView,
android.support.v7.widget.AppCompatTextView 

而不是

ImageButton
ImageView

如果使用矢量类型图像。主要用于自定义视图。


-4
投票

从可绘制文件夹中删除两个文件夹,然后重建项目,它将正常工作enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.