小编典典

如何在 Android 中进行平滑的图像旋转?

all

我正在使用 aRotateAnimation来旋转我在 Android 中用作自定义循环微调器的图像。这是我的rotate_indefinitely.xml文件,我把它放在res/anim/

<?xml version="1.0" encoding="UTF-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:duration="1200" />    

当我将其应用于我的ImageViewusingAndroidUtils.loadAnimation()时,效果很好!

spinner.startAnimation( 
    AnimationUtils.loadAnimation(activity, R.anim.rotate_indefinitely) );

一个问题是图像旋转似乎在每个周期的顶部暂停。

换句话说,图像旋转 360 度,短暂暂停,然后再次旋转 360 度,等等。

我怀疑问题在于动画使用的是默认插值器,如android:iterpolator="@android:anim/accelerate_interpolator"( AccelerateInterpolator),但我不知道如何告诉它不要插值动画。

如何关闭插值(如果这确实是问题)以使我的动画循环顺利进行?


阅读 65

收藏
2022-05-26

共1个答案

小编典典

你对 AccelerateInterpolator 是正确的;您应该改用 LinearInterpolator 。

您可以将动画 XML 文件中的内置android.R.anim.linear_interpolatorandroid:interpolator="@android:anim/linear_interpolator".

或者您可以在您的项目中创建自己的 XML 插值文件,例如将其命名为res/anim/linear_interpolator.xml

<?xml version="1.0" encoding="utf-8"?>
<linearInterpolator xmlns:android="http://schemas.android.com/apk/res/android" />

并添加到您的动画 XML:

android:interpolator="@anim/linear_interpolator"

特别注意:如果您的旋转动画在集合内,则设置插值器似乎不起作用。使旋转顶部元素修复它。(这将节省您的时间。)

2022-05-26