Android开发 之 矢量图的兼容问题

本文探讨了Android中矢量图的兼容问题,介绍如何通过使用VectorDrawableCompat和AnimatedVectorDrawables支持库来确保广泛兼容性,特别是在Android 2.1及更高版本上。建议在低版本设备中使用支持包的组件,并提供代码示例以正确引用矢量绘图。同时警告在高版本系统中过度使用兼容包可能导致问题,推荐根据设备版本选择性使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

矢量图的兼容问题

在支持平台版本低于Android 5.0(API级别21)的设备上支持向量可绘制和动画向量绘制,VectorDrawableCompat和AnimatedVectorDrawableCompat可通过两个新的支持库分别提供:support-vector-drawable和animated-vector-drawable。

Android Studio 1.4通过在构建时生成PNG文件,为矢量绘图提供了有限的兼容性支持。 然而,矢量可绘制和动画矢量绘制支持库提供了灵活性和广泛的兼容性 - 它是一个支持库,因此您可以将其与所有Android平台版本一起使用到Android 2.1(API级别为7+)。要将应用程序配置为使用向量支持库,请将vectorDrawables元素添加到应用程序模块中的build.gradle文件中。

使用以下代码片段来配置vectorDrawables元素:

//For Gradle Plugin 2.0+
 android {
   defaultConfig {
     vectorDrawables.useSupportLibrary = true
    }
 }

//For Gradle Plugin 1.5 or below
android {
  defaultConfig {
    // Stops the Gradle plugin’s automatic rasterization of vectors
    generatedDensities = []
  }
  // Flag notifies aapt to keep the attribute IDs around
  aaptOptions {
    additionalParameters "--no-version-vectors"
  }
}

像前面提到的,这种兼容方式实际上是先关闭AAPT对pre-L版本使用Vector的妥协,即在L版本以上,使用Vector,而在pre-L版本上,使用Gradle生成相应的PNG图片,generatedDensities这个数组,实际上就是要生成PNG的图片分辨率的数组,使用appcompat后就不需要这样了。

当然还要导入支持包:
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-vector-drawable:25.3.0'

同时,确保你使用的是AppCompatActivity而不是普通的Activity。


当您使用ImageView或者ImageButton和FloatingActionButton等子类使用android.support.v7.appcompat包时,您可以使用新的应用:srcCompat属性来引用矢量绘图以及任何其他可用的android:src:

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

要在运行时更改drawables,可以像以前一样使用setImageResource()方法。

但是当你在低版本使用这些组件的话强烈建议使用支持包中的组件。以免不需要的麻烦出现


使用imageView的时候直接设置矢量图就行了

 VectorDrawableCompat vectorDrawableCompat = VectorDrawableCompat.create(getResources(), R.drawable.ic_dahai01, null);
            imageView.setImageDrawable(vectorDrawableCompat);
AnimatedVectorDrawableCompat animatedVectorDrawableCompat1 = AnimatedVectorDrawableCompat.create(this, R.drawable.av_yun);
		iv_yunduo.setImageDrawable(animatedVectorDrawableCompat1);
		animatedVectorDrawableCompat1.start();
如果矢量图用于选择器的话需要特别注意:

在activity中添加一下代码:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
你就可以正常使用Selector这样的DrawableContainers了。同时,你还开启了类似android:drawableLeft这样的compound drawable的使用权限,以及RadioButton的使用权限,以及ImageView’s src属性。

当然在高系统版本的是时候就不要使用兼容包了,判断版本走不通的代码,因为手机品牌太多了坑太多了,我就遇见过,使用兼容包在不通的手机上出问题。

兼容包不支持路径变换,在低版本手机上没有效果而且还报错。其他方面基本支持。

关于path路径自己用代码绘制的话会死人的,不想死就用下面的或者AI软件

http://editor.method.ac/

http://inloop.github.io/svg2android/















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值