如何提高Android上的动画效果?

时间:2019-09-23 09:52:19

标签: android animation kotlin android-constraintlayout objectanimator

我通过使用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
    }
}

0 个答案:

没有答案