Я анимирую изображение, изменяя его высоту с помощью ValueAnimator.Проблема в том, что иногда он немного запаздывает (не начинается плавно), хотя в 80% случаев он проходит довольно гладко.
В представлении изображения есть четыре других вида, ограниченных им, поэтому я тожеанимация их затухания с помощью ObjectAnimator по мере сворачивания изображения.
Я использую 2 AnimatorSet-s для их синхронизации.
Я пытался использовать TransitionManager другими способами, а также пытался игратьвокруг с собственниками аниматоров.Результат был таким же.
Попытался также установить типы слоев видов в LAYER_TYPE_HARDWARE и LAYER_TYPE_SOFTWARE.Тот же результат.
Я также думал, что использование двух AnimatorSet-ов могло бы замедлить анимацию, но я пытался удалить анимацию с замиранием, и иногда коллапс по-прежнему был медленным.
Я думаю, что проблема заключается в макете и его сложности.
Это ConstraintLayout в NestedScrollView.Внутри ConstraintLayout имеет:
1) вложенный ConstraintLayout;
2) два RecyclerView-s;
3) included
LinearLayout с 4-мя многократными исчезающими иout Views, то есть View.GONE к моменту запуска анимации;
4) CardView с вложенным LienarLayout, который CardView также является View.GONE;
5) 1 кнопка, 1 просмотр,5 TextView-s;
6) Мое дополнение к макету -> сворачивающийся фоновый ImageView, еще один маленький ImageView, 2 x TextView, TextInputLayout + TextInputEditText и кнопка.
Когда я пыталсяпри удалении материала анимация улучшается и становится на 100% плавной, когда я удаляю вложенные ConstraintLayout и RecyclerView-ы.
В действительности, единственное, что я могу придумать, это удалить вложенный ConstrainLayout и ограничить его.представления внутри него выглядят так же, как и раньше.
У кого-нибудь есть идеи о том, как улучшить производительность здесь?Имейте в виду, что я довольно ограничен в своих действиях, так как это не личное приложение.
Большое спасибо!
Укажите код ниже:
AnimatorSet().apply {
playTogether {
getCollapseAnimation(),
getFadingViewsAnimatorSet()
}
start()
}
fun getCollapseAnimation(): ValueAnimator {
return ValueAnimator.ofInt(imageView.measuredHeight, 0).apply {
addUpdateListener {
val params = imageView.layoutParams
params.height = it.animatedValue as Int
imageView.layoutParams = params
}
duration = 500
}
}
fun getFadingViewsAnimatorSet(): AnimatorSet {
val fadeAmim1 = ObjectAnimator.ofFloat(view1, View.ALPHA, 0f)
val fadeAnim2 = ObjectAnimator.ofFloat(view2, View.ALPHA, 0f)
val fadeAnim3 = ObjectAnimator.ofFloat(view3, View.ALPHA, 0f)
val fadeAnim4 = ObjectAnimator.ofFloat(view4, View.ALPHA, 0f)
return AnimatorSet().apply {
playTogether(fadeAnim1, fadeAnim2, fadeAnim3, fadeAnim4)
duration = 200
}
}