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
устанавливает позицию из позиции по умолчанию в макете.