#android #android-studio #android-vectordrawable #animatedvectordrawable
#Android #android-studio #android-vectordrawable #animatedvectordrawable
Вопрос:
У меня есть анимированный векторный ресурс для рисования в моей папке для рисования. Я использую следующий код, чтобы запустить его при нажатии кнопки
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 и в противном случае происходит сбой. Мне нужно поддерживать устройства Android с минимальным SDK 21.
Мои вопросы
- Как сделать так, чтобы мой код поддерживал устройства
21
до24
. - есть ли лучший способ запустить
AnimatedVectorDrawable
анимацию
Ответ №1:
Если вы знаете, что используете анимированный вектор, его можно использовать AnimatedVectorDrawableCompat.create()
для создания AnimatedVectorDrawableCompat
экземпляра, доступного на всех устройствах API 14 :
val drawable = AnimatedVectorDrawableCompat.create(
this, // your Context
R.drawable.animation)
button.setOnClickListener {
image.setImageDrawable(null)
image.setImageDrawable(drawable)
drawable.start()
}
Однако, если вам нужен более общий подход, вы должны вместо этого использовать AppCompatResources.getDrawable()
вместо ResourcesCompat.getDrawable()
as, который должным образом учитывает VectorDrawableCompat
классы , AnimatedVectorDrawableCompat
, и AnimatedStateListDrawableCompat
таким образом, чтобы он был совместим со всеми уровнями API:
val drawable = AppCompatResources.getDrawable(
this, // your Context
R.drawable.animation)
button.setOnClickListener {
image.setImageDrawable(null)
image.setImageDrawable(drawable)
if (drawable is Animatable) {
drawable.start()
}
}
Ответ №2:
Вы настроили свою сборку на использование реализации библиотеки поддержки?
android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
Без этого система сборки будет создавать резервные (невекторные) ресурсы для более низких версий SDK вместо использования реализации поддержки.
Комментарии:
1. @ianhanniballake правильно, я бы просто посоветовал вам проверить, что это установлено, чтобы гарантировать, что другие случаи VectorDrawable (Compat) также работают должным образом.
2. Спасибо за комментарий. Он уже был добавлен, но по какой-то причине мой код не работал для < 24, но теперь он работает отлично.