将两个备用旋转应用于Android中的View

时间:2015-01-22 15:54:23

标签: android animation rotation

我想将2个备用旋转动画应用于视图。每次旋转都应在单击同一视图后开始。

我正在寻找的结果是:

  • 用户点击视图,它从0°旋转到135°
  • 用户再次点击视图,它从135°旋转到0°(到初始状态)

问题在于,当用户执行第二次单击时,Button会在正确开始动画之前重置为初始方面。

我的目标是Android API< 11所以我正在使用startAnimation()方法。动画应用于按钮定义,如下所示:

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

动画如下

rotate_cw.xml(0°到135°旋转):

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

<rotate
    android:duration="300"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="135" />

</set>

rotate_ccw.xml(旋转135°到0°):

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

<rotate
    android:duration="300"
    android:fromDegrees="135"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="0"/>

</set>

然后以这种方式应用动画,其中flag是布尔全局变量:

Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (flag) {
            Animation a = AnimationUtils.loadAnimation(this, R.anim.rotate_cw);
            b.startAnimation(a);
        } else {
            Animation a = AnimationUtils.loadAnimation(this, R.anim.rotate_ccw);
            b.startAnimation(a);
        }
        flag = !flag;
    }
});

我错过了什么吗?

提前感谢您的帮助。

0 个答案:

没有答案