setX(), setTranslationX(), setY() и setTranslationY()

Каковы различия между setX(), setY() и setTranslationX(), setTranslationY()? Являются ли они устанавливают смещения на существующих координатах или устанавливают абсолютные позиции?

Если они устанавливают абсолютные координаты, это не противоречит ограничениям родительского макета?

Скажем, у нас есть что-то вроде | View 1 | View 2 | View 3| | View 1 | View 2 | View 3|

в LinearLayout, что делать, если мы сделали view2.setX(0); или view2.setTranslationX(0); будет просматривать 2 вида перекрытия 1 или нажимать вид 1 сбоку?

Аналогично, если бы у нас был дочерний элемент RelativeLayout, у которого параметр alignParentBottom установлен на true, но мы вручную установили координату child y в 0. Какое правило макета выигрывает?

По сути, я смущен тем, как ручные координаты влияют на правила компоновки контейнера, а также на разницу между трансляцией и X/Y. Я извиняюсь заранее, если это кажется тривиальным, но я новичок в Android, пришедшем из iOS.

Ответ 1

В документах setTranslationX:

Устанавливает горизонтальное расположение этого вида относительно его левого положения. Это эффективно позиционирует объект post-layout, в дополнение к тому, куда размещал его макет объекта.

И setX:

Устанавливает визуальную позицию x этого вида в пикселях. Это эквивалентно тому, что свойство translationX является разницей между переданным значением x и текущим значением left.

Таким образом, вы можете думать о setTranlsationX как относительном смещении: перемещайте 3 пикселя слева от того, где вы обычно были. И setX - фиксированная позиция: переместите все, что у вас есть, чтобы вы закончили рисовать по координате X.

Ответ 2

setX/Y установить абсолютное положение от 0,0 экрана. setTranlsationX/Y устанавливает позицию из позиции по умолчанию в макете.

enter image description here