Android 缩放和旋转动画不流畅,跳跃

Android scale and rotate animation not smooth, jumps

这两种动画方法有什么区别?他们都达到了相同的结果,但第一个是生涩的,而第二个是光滑的。为什么?

这个动画进展顺利,直到最后突然跳到它的最终位置。一切看起来都很简单,这是怎么回事?

        val cube = homeBinding.imgCube
        val animSet = AnimationSet(true)

        val rotateAnimation = RotateAnimation(0.0f,
            720.0f,
            Animation.RELATIVE_TO_SELF,
            0.5f,
            Animation.RELATIVE_TO_SELF,
            0.5f)

        val scaleAnimation: Animation = ScaleAnimation(
            0.1f, 0.4f,
            0.2f, 0.4f,
            Animation.RELATIVE_TO_SELF, 0.5f,
            Animation.RELATIVE_TO_SELF, 0.5f)

        scaleAnimation.interpolator = LinearInterpolator()
        rotateAnimation.interpolator = LinearInterpolator()


        animSet.duration = 3000
        animSet.addAnimation(rotateAnimation)
        animSet.addAnimation(scaleAnimation)

        cube.startAnimation(animSet)

和xml:

  <ImageView
            android:id="@+id/imgCube"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:contentDescription="some"
            android:scaleType="centerInside"
            android:scaleX="0.4"
            android:scaleY="0.4"
            app:srcCompat="@drawable/kk" />

虽然这个效果很好。

但是有什么区别呢?

 cube.animate().scaleX(0.4f)
            .scaleY(0.4f)
            .setDuration(3000)
            .rotation(720f)
            .setInterpolator (LinearInterpolator())
            .start();

第一种方法是使用 RotateAnimation and a ScaleAnimation with an AnimationSet, the second approach (which is by far better for this task, let alone the much shorter code) is using ViewPropertyAnimator

我只能说我以前在使用 AnimationSet 和这类动画时遇到过错误问题,所以我强烈推荐 ViewPropertyAnimator 用于进一步的动画

我猜第一种方法是跳回,因为你没有指定 setFillAfter(true) AnimationSet 中的方法,and/or 它与 Pivots (RELATIVE_TO_SELF)

有关