ObjectAnimator不采用Int值吗?

时间:2019-01-13 21:30:33

标签: android animation kotlin objectanimator

单击时,我想将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变量中的centerXsoulToX/Y。那也没有效果。单击时仍然没有任何移动。它可以与ofFloat配合使用并浮动,因此问题似乎出在Int值和ofInt上。我看到了两种我不知道如何实现的解决方案:使它与Int一起使用,或者使centerXcenterY浮动。有人对此有想法吗?

2 个答案:

答案 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)

如果您确定动画值是正确的,则可能所需要做的就是刷新视图,尝试使用requestlayoutinvalidate之类的东西。