setTranslationX / Y和offsetLeftAndRight / offsetTopAndBottom之间的区别?

时间:2016-11-03 00:48:03

标签: android android-layout

我正在使用CoordinatorLayout使用ViewCompat.offsetLeftAndRightViewCompact.offsetTopAndBottom API为子视图位置设置动画。

当从CoordinatorLayout添加或删除子视图时,布局操作会将每个孩子的位置重置为屏幕的左上角,即没有任何偏移。

这个article通过在子视图上设置布局侦听器并恢复旧位置来提供解决方案。

我注意到使用setTranslationXsetTranslationY API时,不会发生此问题。儿童在父母布局活动后保持其位置。

如何在这两组API之间做出决定,以便在屏幕上安排我的观点?我在不理解他们的差异的情况下谨慎使用任何一种。通过阅读官方文档,我没有得到很好的理解。

1 个答案:

答案 0 :(得分:2)

几个月之后的一个老问题我几乎没有解释:

首先要做的事情。偏移将水平或垂直移动视图,类似于平移,但它用于永久结果。

当您在内部使用View#offsetTopAndBottom(int offset)时,它具有以下功能:

mTop += offset;
mBottom += offset;

另一方面,tranlate是一个变量,除了这个顶部/底部/左/右位置之外还计算,并且在动画中非常方便。

如果需要,这两种方法都会触发布局刷新。

Nick Butcher在这段精彩视频中解释了更多内容:https://www.youtube.com/watch?v=86p1GPEv_fY&t=5m42s

关于CoordinatorLayout您是否可以通过任何更改为孩子设置边距?例如。 BottomSheetBehavior对边距不起作用,因为它忽略了它们。我想你可能就是这种情况。