我在“绘图”文件夹中有一个动画向量可绘制资产。我使用下面的代码在单击按钮上运行它
val myVectorDrawable = ResourcesCompat.getDrawable(
resources,
R.drawable.animation,
theme
)
button.setOnClickListener {
image.setImageDrawable(null)
image.setImageDrawable(myVectorDrawable)
val drawable = image.drawable
if (drawable is AnimatedVectorDrawableCompat) {
drawable.start()
} else if (drawable is AnimatedVectorDrawable)
drawable.start()
}如果设备运行android版本> 24,否则就会崩溃,这将完美地运行。我需要用最低限度的SDK 21支持android设备。
我的问题是
如何将我的代码支持设备与24.
AnimatedVectorDrawable动画的更好方法
发布于 2020-10-07 05:34:34
如果您知道您使用的是动画向量,则可以使用AnimatedVectorDrawableCompat.create()创建在所有API 14+设备上可用的AnimatedVectorDrawableCompat实例:
val drawable = AnimatedVectorDrawableCompat.create(
this, // your Context
R.drawable.animation)
button.setOnClickListener {
image.setImageDrawable(null)
image.setImageDrawable(drawable)
drawable.start()
}但是,如果您想要一种更通用的方法,则必须使用AppCompatResources.getDrawable()而不是ResourcesCompat.getDrawable(),因为它以与所有API级别兼容的方式正确地考虑了VectorDrawableCompat、AnimatedVectorDrawableCompat和AnimatedStateListDrawableCompat类:
val drawable = AppCompatResources.getDrawable(
this, // your Context
R.drawable.animation)
button.setOnClickListener {
image.setImageDrawable(null)
image.setImageDrawable(drawable)
if (drawable is Animatable) {
drawable.start()
}
}发布于 2020-10-07 05:37:32
您是否将构建配置为使用支持库实现?
android { defaultConfig { vectorDrawables.useSupportLibrary = true }
否则,构建系统将为较低的SDK版本创建回退(非向量)资源,而不是使用支持实现。
https://stackoverflow.com/questions/64237583
复制相似问题