对话框里面的Android动画很慢

时间:2018-04-09 14:29:32

标签: android kotlin android-animation

我对AnimatorSet playTogetherObjectAnimator内部对话(DialogFragment / AlertDialog)的效果进行了多次测试(点击/手动测试)并进行了比较活动或片段中裸露的充气布局中AnimatorSet的速度。我在对话框中做动画的结论(无论是DialogFragment还是AlertDialog)是否很慢并且有故障。

任何人都可以证实吗?

要重现此问题,请首先创建一个简单的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <View
         android:id="@+id/view1"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />

    <View
         android:id="@+id/view2"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>

我们可以用CustomViewImageView替换View(view1,view2),或者添加一些布局约束来重新定位视图。我们也可以将ConstraintLayout替换为LinearLayoutRelativeLayout等。上面的代码只是一个说明目的。

ActivityDialogFragment内,使用ObjectAnimatorAnimatorSet动画显示所有观看次数:

// find view1 and view2 and declare as variable value

// ....
val listOfView = listOf(view1, view2)
val animSet = AnimatorSet()
val animators = listOfView.map {
    val animator = ObjectAnimator.ofFloat(it, "rotation", 0f, 360f)
    animator.duration = 1000
    animator.repeatCount = ObjectAnimator.INFINITE
    animator.repeatMode = ObjectAnimator.RESTART                
    animator.interpolator = LinearInterpolator()
    animator
}

animSet.playTogether(animators)
animSet.start()

我在这里使用kotlin,因为Android现在正式支持kotlin。

我们将观察到DialogFragment内的动画有毛刺,但活动/片段中的动画优于并且速度快。将持续时间增加到极限水平(如500或200),Dialog内的毛刺看起来会更加微妙。

有人能证实这个问题吗?那背后有什么解释和原因?如果有办法在对话框中增加动画的性能,如何实现呢?。

0 个答案:

没有答案