我正在使用 CoordinatorLayout
,其中 subview 位置使用 ViewCompat.offsetLeftAndRight
和 ViewCompact.offsetTopAndBottom
API 进行动画处理。
当从 CoordinatorLayout
中添加或删除 subview 时,布局操作会将每个 subview 的位置重置为屏幕的左上角,即没有任何偏移。
这article提供了一个解决方案,通过在 subview 上设置布局监听器并恢复旧位置。
我注意到使用 setTranslationX
和 setTranslationY
API,不会出现这个问题。子级在父级布局事件后保持其位置。
我应该如何在这两组 API 之间做出选择以在屏幕上排列我的 View ?我对在不了解它们的差异的情况下使用它们持谨慎态度。看了官方文档,没有很好的理解。
最佳答案
几个月后的一个老问题,我几乎没有解释:
要事第一。偏移将水平或垂直移动 View ,类似于平移,但它用于永久结果。
当您使用 View#offsetTopAndBottom(int offset)
时,它在内部具有以下功能:
mTop += offset;
mBottom += offset;
另一方面,translate 是一个变量,它是在顶部/底部/左侧/右侧位置之外计算的,并且在动画中非常方便。
如果需要,这两种方法都会触发布局刷新。
Nick Butcher 在这个不错的视频中解释了更多内容:https://www.youtube.com/watch?v=86p1GPEv_fY&t=5m42s
关于 CoordinatorLayout
,您是否对子项的边距设置有任何更改?例如。 BottomSheetBehavior
不能很好地处理边距,因为它会忽略它们。我认为您可能就是这种情况。
关于android - setTranslationX/Y 和 offsetLeftAndRight/offsetTopAndBottom 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392107/