我通过使用ValueAnimator更改其高度来对图像视图进行动画处理。 问题在于,即使大约80%的时间运行得很顺利,有时也会有些滞后(无法顺利开始)。
图像视图还具有其他四个受其限制的视图,因此我还将使它们动画化,以便在图像视图崩溃时使用ObjectAnimator淡出。
我正在使用2个AnimatorSet-s进行同步。
我尝试以其他方式使用TransitionManager并尝试使用Property动画师。结果是一样的。
还尝试将视图的图层类型设置为LAYER_TYPE_HARDWARE和LAYER_TYPE_SOFTWARE。结果相同。
我还认为使用两个AnimatorSet-s可能会减慢动画的速度,但是我尝试删除褪色的动画,并且崩溃有时仍然很慢。
我认为问题出在布局及其复杂性上。
这是NestedScrollView中的ConstraintLayout。 在内部,ConstraintLayout具有:
1)嵌套的ConstraintLayout;
2)两个RecyclerView-s;
3)一个included
LinearLayout,其中有4个在动画开始时反复淡入和淡出Views,即View.GONE;
4)一个具有嵌套LienarLayout的CardView,该CardView也是View.GONE;
5)1个按钮,1个视图,5个TextView-s;
6)我对布局的添加->折叠的背景ImageView,另一个小ImageView,2个TextView,TextInputLayout + TextInputEditText和一个按钮。
当我尝试删除内容时,动画会变得更好,并且当我删除嵌套的ConstraintLayout和RecyclerView-s时,动画会100%平滑。
实际上,我唯一能想到的就是删除嵌套的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
}
}