Разница между setTranslationX / Y и offsetLeftAndRight / offsetTopAndBottom?

Я работаю с CoordinatorLayout в котором позиции дочерних позиций анимируются с ViewCompat.offsetLeftAndRight API ViewCompat.offsetLeftAndRight и ViewCompact.offsetTopAndBottom .

Когда дочерний вид добавляется или удаляется из CoordinatorLayout , операция макета сбрасывает положение каждого ребенка в верхний левый угол экрана, то есть без какого-либо смещения.

В этой статье вы найдете решение, установив прослушиватель макета на дочерний режим и восстановив старые позиции.

Я заметил, что с использованием API setTranslationX и setTranslationY эта проблема не возникает. Дети сохраняют свою позицию после событий макета родителя.

Как мне выбрать между этими двумя наборами API для размещения моих просмотров на экране? Я опасаюсь использовать либо не понимая их различий. Читая официальную документацию, я не понял.

Solutions Collecting From Web of "Разница между setTranslationX / Y и offsetLeftAndRight / offsetTopAndBottom?"

Довольно старый вопрос после многих месяцев у меня мало объяснений:

Прежде всего. Смещение будет перемещать вид по горизонтали или вертикали аналогично, чтобы перевести, но он используется для постоянных результатов.

Когда вы используете View#offsetTopAndBottom(int offset) то внутри он имеет следующие функции:

 mTop += offset; mBottom += offset; 

С другой стороны, tranlate – это переменная, которая вычисляется в дополнение к этим позициям top / bottom / left / right и в основном удобна в анимации.

Оба метода активируют обновление макета, если это необходимо.

Больше было объяснено Ником Батчером в этом хорошем видео: https://www.youtube.com/watch?v=86p1GPEv_fY&t=5m42s

Что касается CoordinatorLayout , вы можете изменить настройки для детей? Например, BottomSheetBehavior не работает с полями, так как игнорирует их. Думаю, это может быть так.