为什么图像旋转动画仅在第一次正常工作

时间:2017-12-23 15:49:29

标签: android android-animation

我有这个简单的箭头图像旋转动画,它仅适用于第一次。从第二次开始它仍然进行旋转但没有慢动画。

enter image description here

这是anim xml文件中的代码

旋转180

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1500"
    android:fromDegrees="0"
    android:toDegrees="180"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="0"
    android:fillAfter="true"
    android:fillEnabled="true"/>

旋转重力

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1500"
    android:fromDegrees="180"
    android:toDegrees="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="0"
    android:fillAfter="true"
    android:fillEnabled="true"
    />

卡片视图中的图片视图。

<ImageView
   android:id="@+id/creadit_card_next_image"
   android:layout_width="@dimen/next_image_size" 
   android:layout_height="@dimen/next_image_size"
   android:layout_marginEnd="@dimen/static_menu_primary_margin"
   android:layout_marginTop="16dp"
   android:rotation="-90"
   android:src="@drawable/ic_navigate_next"
   android:tint="@color/colorPrimary"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintTop_toTopOf="parent" />

触发动画的Java代码。

private Animation rotatePlus180;
private Animation rotateMinus180;
private boolean creditDebitCardViewExpanded = true;

rotatePlus180 = AnimationUtils.loadAnimation(this, R.anim.rotate_plus_180);
rotateMinus180 = AnimationUtils.loadAnimation(this, R.anim.rotate_minus_180);



private void onClickCreditDebitCardView() {
        creditDebitCardPaymentMethod.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (creditDebitCardViewExpanded) {
                    expandAnimation(paymentRecyclerView);
                    creditDebitCardViewExpanded = false;
                    creditCardNextImage.setAnimation(rotatePlus180);
                } else {
                    collapseAnimation(paymentRecyclerView);
                    creditDebitCardViewExpanded = true;
                    creditCardNextImage.setAnimation(rotateMinus180);

                    CreditDebitLayoutContainer.setPadding(0, 0, 0, padding);
                }

            }
        });
    }

1 个答案:

答案 0 :(得分:2)

而不是setAnimation使用startAnimation

creditCardNextImage.startAnimation(rotatePlus180);
creditCardNextImage.startAnimation(rotateMinus180);

一旦将动画附加到视图/或添加视图时,似乎会调用setAnimation。

即使已添加视图,也会一直调用StartAnimation。