减慢当前的动画?

时间:2014-07-28 15:21:51

标签: android animation

我试图实现一个相当简单的目标。有一个螺旋桨的imageView,旋转的无限LinearInterpolator动画直到按下按钮。如何在用户按下按钮后将动画减慢到停止状态?

这是一个非常简单的动画代码:

<?xml version="1.0" encoding="UTF-8"?>
<rotate
    android:interpolator="@anim/linear_interpolator"
    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:fillAfter="true"
    android:fillEnabled="true"
    android:duration="800" />

2 个答案:

答案 0 :(得分:6)

开始动画:

int loops = 1000000;
int degreesPerSecond = 360;
view.animate().rotationBy(degreesPerSecond * loops).setDuration(loops * 1000)
  .setInterpolator(new LinearInterpolator());

停止动画:

view.animate().rotationBy(degreesPerSecond/2).setDuration(1000)
    .setInterpolator(new DecelerateInterpolator());

您需要使用这些值来获得它想要的效果。但这看起来还不错。

答案 1 :(得分:0)

创建另一个具有相同动画的XML文件,并将持续时间设置为更多,可能是1200.当您单击按钮时,您将View(螺旋桨)设置为新的较慢动画。

public void onButtonClick(View v)
{
    if(slow){
        Animation fastRotate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate_fast); 
        propellerView.startAnimation(fastRotate)
    }
    else{
        Animation slowRotate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate_slow); 
        propellerView.startAnimation(slowRotate)
    }
}