【问题标题】:Why image rotation animation only works correctly for the first time为什么图像旋转动画第一次才能正常工作
【发布时间】:2017-12-23 15:49:29
【问题描述】:

我有这个简单的箭头图像旋转动画,它只是第一次按预期工作。从第二次开始,它仍然在旋转,但没有缓慢的动画。

这是 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);
                }

            }
        });
    }

【问题讨论】:

  • 你在哪里设置rotatePlus/Minus180?你可能会失去这些价值观。我真的不能告诉你要去另一个活动或做一些可能导致他们迷路的事情。如果您还没有这样做,请尝试将它们设置为 onResume()
  • 我在onCreate() 中分配rotatePlus/Minus180。而且我不会参加其他活动。

标签: android android-animation


【解决方案1】:

使用 startAnimation 代替 setAnimation

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

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

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

【讨论】:

    猜你喜欢
    • 2011-08-29
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多