android - 为什么图像旋转动画只能在第一次正常工作

标签 android android-animation

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

enter image description here

这是动画 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"
    />

卡片 View 中的 ImageView 。

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

            }
        });
    }

最佳答案

使用 startAnimation 代替 setAnimation

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

setAnimation 似乎在您将动画附加到 View /或添加 View 时被调用。

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

关于android - 为什么图像旋转动画只能在第一次正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953852/

相关文章:

Android:屏幕方向更改 fragment.getActivity 为空

android - 运行 Espresso 测试时如何在代码中禁用动画

java - 为什么在两个项目中从左到右对 ImageView 进行动画处理时,我收到不同的结果?

android:图像燃烧效果/动画

android - android Studio中的Bintray 502坏网关

android - Android Studio中的Gradle同步错误在根项目上给出错误

android - 如何在 Android 的 React Native 中更新状态

android - 如何从终端模拟器启动 Android 应用程序

java - 同时淡入和淡出

android - 在 Robolectric 3.0+ 中跳过动画