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

Posted

技术标签:

【中文标题】Android缩放和旋转动画不流畅,跳跃【英文标题】:Android scale and rotate animation not smooth, jumps 【发布时间】:2021-12-20 09:08:20 【问题描述】:

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

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

        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_
            android:layout_
            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();

【问题讨论】:

【参考方案1】:

第一种方法是使用RotateAnimation 和ScaleAnimation 和AnimationSet,第二种方法(对于这个任务来说要好得多,更不用说更短的代码了)是使用ViewPropertyAnimator。

我只能说我之前在 AnimationSet 和这些类型的动画中遇到了错误的问题,所以我强烈推荐 ViewPropertyAnimator 来获得更多的动画

我猜在第一种方法中它会跳回来,因为您没有指定 setFillAfter(true) AnimationSet 中的方法,和/或它与枢轴(RELATIVE_TO_SELF)有关

【讨论】:

thnx;它是 fillAfter - 我之前尝试过,但是将它设置在单个动画元素上;在我将它应用到动画集之后,它起作用了

以上是关于Android缩放和旋转动画不流畅,跳跃的主要内容,如果未能解决你的问题,请参考以下文章

iOS动画(三):核心动画中缩放和旋转(Swift)

Flutter动画 --- 平移/旋转/缩放/渐变

如何避免旋转动画在 2π 边界处跳跃?

Android 动画

CSS3炫酷的动画制作技巧—缩放和旋转

android如何对viewpager里面的图片进行缩放