ObjectAnimator не принимает значения Int? - PullRequest
0 голосов
/ 14 января 2019

При щелчке я хочу переместить ImageView в центр кнопки, поэтому я решил взять координаты центра и затем поместить эти координаты в Objectanimator, которые я затем запускаю одновременно из 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. У кого-нибудь есть идеи для этого?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Если вы уверены, что ваша анимация верна, возможно, все, что вам нужно, это обновить изображение, попробуйте что-то вроде requestlayout или invalidate и т. Д.

0 голосов
/ 14 января 2019

Я рекомендую вам использовать 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();
}
...