我正在使用CoordinatorLayout
使用ViewCompat.offsetLeftAndRight
和ViewCompact.offsetTopAndBottom
API为子视图位置设置动画。
当从CoordinatorLayout
添加或删除子视图时,布局操作会将每个孩子的位置重置为屏幕的左上角,即没有任何偏移。
这个article通过在子视图上设置布局侦听器并恢复旧位置来提供解决方案。
我注意到使用setTranslationX
和setTranslationY
API时,不会发生此问题。儿童在父母布局活动后保持其位置。
如何在这两组API之间做出决定,以便在屏幕上安排我的观点?我在不理解他们的差异的情况下谨慎使用任何一种。通过阅读官方文档,我没有得到很好的理解。
答案 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
对边距不起作用,因为它忽略了它们。我想你可能就是这种情况。