我有一个有文字的适配器。 CountDownTimer用于每1秒向适配器添加数据,并且notifyItemInserted。当onBindViewHolder时,运行以下代码:
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 :(得分:0)
上述两段代码有什么不同?
从概念上讲,它们看起来非常相像。然而,存在着微妙的差异。
以下声明:
ObjectAnimator.ofFloat(sampleItemView, "translationY", 1000f, 1f)
你告诉:“动画translationY
属性从值1000到1”。
另一方面,以下声明:
translationYBy(1000f)
您告诉我:“将当前值设置为{{1>}属性当前+ 1000 ”。
因此,他们不相等。
此动画将等于初始动画:
translationY
请注意,
view.animate()
.withStartAction(() -> {
view.setTranslationX(1000);
view.setTranslationY(1000);
})
.translationX(1)
.translationY(1)
...
代替translationY()
。