单击时,我想将ImageView移至按钮的中心,因此我认为我要获取中心的坐标,然后将这些坐标放入Objectanimators中,然后从onClickListener同时开始。我以为下面的代码应该做到这一点。
var centerX = (dobutton.left + dobutton.right)/2
var centerY = (dobutton.top + dobutton.bottom)/2
var soultoX = ObjectAnimator.ofInt(R.id.soul, "x", centerX).apply {
duration = 1000
}
var soultoY = ObjectAnimator.ofInt(R.id.soul, "y", centerY).apply {
duration = 1000
}
fun soulToButton() = AnimatorSet().apply {
play(soultoX).with(soultoY)
start()
}
dobutton.setOnClickListener {
[...]
soulToButton()
[...]
}
单击时没有任何反应。任何想法为什么以及如何解决?
编辑:我用各种数字替换了centerY
变量中的centerX
和soulToX/Y
。那也没有效果。单击时仍然没有任何移动。它可以与ofFloat
配合使用并浮动,因此问题似乎出在Int值和ofInt
上。我看到了两种我不知道如何实现的解决方案:使它与Int一起使用,或者使centerX
和centerY
浮动。有人对此有想法吗?
答案 0 :(得分:0)
我建议您使用 AnimatorSet
进行多个同时转换,此转换正是针对此类情况而设计的。
使用 AnimatorSet
,您的过渡动画看起来像这样:
public void onBtnClick(View btn) {
AnimatorSet animator = new AnimatorSet();
View imageView = findViewById(R.id.soul);
ObjectAnimator x = ObjectAnimator.ofFloat(imageView,
"translationX", imageView.getX(), btn.getPivotX() - imageView.getPivotX());
ObjectAnimator y = ObjectAnimator.ofFloat(imageView,
"translationY", imageView.getY(), btn.getPivotY() - imageView.getPivotY());
animator.playTogether(x, y);
animator.setInterpolator(new LinearInterpolator());
animator.setDuration(1000);
animator.start();
}
答案 1 :(得分:0)
如果您确定动画值是正确的,则可能所需要做的就是刷新视图,尝试使用requestlayout
或invalidate
之类的东西。