0

텍스트가있는 어댑터가 있습니다. CountDownTimer는 1 초마다 어댑터에 데이터를 추가하고 notifyItemInserted를 사용하는 데 사용됩니다. onBindViewHolder를 실행하면 다음 코드가 실행됩니다.View.animate()를 사용하여 RecyclerView에서 itemView에 애니메이션 적용

sampleItemView.setText(text) 
     val animatorY = ObjectAnimator.ofFloat(sampleItemView, "translationY", 1000f, 1f) 
     val animatorX = ObjectAnimator.ofFloat(sampleItemView, "translationX", 1000f, 1f) 
     val set = AnimatorSet() 
     set.playTogether(animatorX, animatorY) 
     set.duration = 2000 
     set.start() 

애니메이션이 성공적으로 수행되었습니다. 내가

sampleItemView.animate() 
        .setInterpolator(LinearInterpolator()) 
        .translationXBy(1000f) 
        .translationYBy(1000f) 
        .setDuration(2000) 
        .setUpdateListener({ 
         println("x($text): ${sampleItemView.x}") 
         println("y($text): ${sampleItemView.y}") 
        }) 
        .start() 

로 변경할 때 그러나 애니메이션은 실행할 수 없습니다. 위의 두 코드와의 차이점은 무엇입니까?

답변

0

위의 두 코드와의 차이점은 무엇입니까?

개념적으로는 매우 유사합니다. 그럼에도 불구하고 미묘한 차이가 있습니다. 다음 문으로

:

ObjectAnimator.ofFloat(sampleItemView, "translationY", 1000f, 1f) 

당신이 말할 : "1 가치 1000 translationY 속성에 애니메이션". 다음 문 한편

: 당신이 말하고있다

translationYBy(1000f) 

는 "현재 값 1000 + 현재 translationY 속성에 애니메이션".

따라서, 이들은 이 아니고,이 동일하다.

이 애니메이션은 초기 동등의 것 :

 

    view.animate() 
     .withStartAction(() -> { 
       view.setTranslationX(1000); 
       view.setTranslationY(1000); 
      }) 
     .translationX(1) 
     .translationY(1) 
     ... 
 

지불주의, translationY() 대신 translationYBy() 사용됩니다.