Рассмотрим пример со значениями, о которых легко рассуждать:
- Первый
ImageView
имеет значение (50, 50) - Второй
ImageView
имеет значение ( 100, 100)
Когда вы нажимаете кнопку в первый раз, свойство translationX
будет анимироваться с текущего значения (0
) до 100 - 50 = 50
. То же самое для свойства translationY
.
«Перевод» является относительным. Поэтому мы добавим перевод к исходным координатам представления. 50 + 50 = 100
, поэтому первый вид перемещается в (100, 100), то же положение, что и второй вид.
- Первый
ImageView
находится в (100, 100) со значениями перевода 50 и 50. - Второй
ImageView
все еще находится в (100, 100)
Важно понимать, что свойства x
и y
первого вида обновляются, но свойства translationX
и translationY
«помнят», что они ненулевые. Итак, теперь первое представление в (100, 100), но оно помнит, что оно имеет значения перевода 50 и 50.
Теперь вы нажимаете кнопку еще раз. Мы выполняем те же вычисления, что и раньше, но на этот раз начальные значения для translationX
(и y) не равны нулю, а 50
. Таким образом, свойство translationX
будет анимироваться с текущего значения (50
) до 100 - 100 = 0
. По сути, мы «сбрасываем» значения перевода обратно в ноль. Таким образом, вид возвращается в исходное положение.