Как переместить представление в другое представление с помощью анимации в Android?

У меня есть окружность в центре экрана, внутри которой есть ImageView + TextView. У меня есть еще два ImageView + TextView, один вверху и еще один внизу экрана. Вот макет пользовательского интерфейса Мое требование:

Мне нужна копия верхнего ImageView + TextView и копия нижней ImageView + TextView для перемещения в анимации в центр круга, тем самым изменяя значение textView внутри круг.

Например:

Скажем, верхний текст имеет значение 200, а нижнее текстовое изображение имеет значение 300. Я хочу, чтобы часть этих значений (например, 100 или 150) была анимирована и перемещалась в круг, но исходные значения 200 и 300 должны оставаться в одном и том же положении.

Я пробовал использовать TranslateAnimation. Однако я сталкиваюсь с проблемами, обнаруживая координаты x и y центрального круга. Это не совсем подходит к центру круга. Также оригинальная позиция view's не сохраняется.

    TranslateAnimation animation = new
TranslateAnimation(startLayout.getX(),endLayout.getX(),
startLayout.getY(),endLayout.getY);
                    animation.setDuration(1000);
                    animation.setFillAfter(false);
                    startView.startAnimation(animation);

startLayout - это linearlayout, в котором находятся ImageView и TextView. Пожалуйста помоги! Спасибо!

Ответ 1

У меня была такая же проблема, и я исправил с помощью следующего кода (извините, что в Kotlin, но работает то же самое в Java). Скажем, viewFirst хочет достичь viewTwo позиции:

(НЕ ИСПОЛЬЗУЙТЕ):

               viewFirst.animate()
                        .translationX(viewSecond.x)
                        .translationY(viewSecond.y)
                        .setDuration(1000)
                        .withEndAction {
                        //to make sure that it arrives, 
                        //but not needed actually these two lines
                            viewFirst.x = viewSecond.x
                            viewFirst.y = viewSecond.y
                        }
                        .start()

(ИСПОЛЬЗУЙТЕ ЭТО РЕШЕНИЕ):

               viewFirst.animate()
                        .x(viewSecond.x)
                        .y(viewSecond.y)
                        .setDuration(1000)
                        .withEndAction {
                        //to make sure that it arrives, 
                        //but not needed actually these two lines
                            viewFirst.x = viewSecond.x
                            viewFirst.y = viewSecond.y
                        }
                        .start()