2017-12-23 15 views
1

본인은 처음에만 의도 한대로 작동하는이 단순 화살표 이미지 회전 애니메이션을 보유하고 있습니다. 두 번째 이후부터 여전히 느린 애니메이션이 아닌 회전을합니다. 여기 이미지 회전 애니메이션이 처음으로 올바르게 작동하는 이유

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" /> 

자바 코드는 애니메이션을 트리거합니다.

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

      } 
     }); 
    } 
+0

어디에서 'rotatePlus/Minus180'을 (를) 설정하고 있습니까? 당신은 그 값을 잃을 수도 있습니다. 나는 정말로 당신이 다른 활동으로 가고 있거나 그들이 잃어 버릴 수있는 일을한다고 말할 수는 없습니다. 이미 그렇게하지 않았다면,'onResume()'에 그것들을 설정해보십시오. – Gary99

+0

'onCreate()'에'rotatePlus/Minus180'을 지정하고 있습니다. 나는 다른 활동으로 가지 않을거야. –

답변

2

대신 setAnimation 사용 startAnimation의

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

setAnimation 당신이보기에 애니메이션을 첨부하면/또는 뷰가 추가 될 때 호출 할 것으로 보인다.

StartAnimation은보기가 이미 추가 된 경우에도 항상 호출됩니다.