Как анимировать вид, быстро меняя его положение по оси Y?

Пользователям разрешено изменять положение кнопки на экране по оси Y с помощью ползунка. Когда это происходит, я хочу анимировать свою кнопку. Например, представление расположено в (0,0), и пользователь внезапно устанавливает его положение на (0, 420).

Кнопка должна сначала исчезнуть (от альфы 1,0 до альфы 0,0 за 400 мс), находясь в текущей позиции (0,0).

Затем положение кнопки должно измениться на (0,420), и оно должно исчезать (от альфы 0,0 до альфы 1,0 за 400 мс), находясь в измененном положении (0, 420).

Поскольку расположение кнопки можно изменить очень быстро, я получил яркий анимационный эффект, который мне не нужен. Вот мой код:

        /* Alpha from 1 to 0 */
        ObjectAnimator animation = ObjectAnimator.ofFloat(myButton, "alpha", 1, 0);
        animation.setDuration(400);
        animation.setRepeatCount(1);
        animation.setInterpolator(new LinearInterpolator());
        animation.start();

        /* Alpha from 0 back to 1 */
        animation = ObjectAnimator.ofFloat(myButton, "alpha", 0, 1);
        animation.setDuration(400);
        animation.setRepeatCount(1);
        animation.setInterpolator(new LinearInterpolator());
        animation.start();

person DoubleYouJeeOh    schedule 28.12.2020    source источник


Ответы (1)


Я нашел решение, используя ValueAnimator:

ValueAnimator animator = ValueAnimator.ofInt((int) oldY, newY);
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            params.y = (Integer) animation.getAnimatedValue();
            mWindowManager.updateViewLayout(myView, params);
        }
    });
    animator.start();
person DoubleYouJeeOh    schedule 28.12.2020