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

sig*_*ger 11 android android-layout

CoordinatorLayout正在使用ViewCompat.offsetLeftAndRightViewCompact.offsetTopAndBottomAPI 一起使用其中的子视图位置进行动画处理.

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

文章提供了一个解决方案,通过在子视图设置布局听众和恢复老位置.

我注意到使用setTranslationXsetTranslationYAPI,这个问题不会发生.儿童在父母布局事件后保持其位置.

我应如何在这两套API之间做出决定,以便在屏幕上安排我的观点?我很谨慎地使用它们而不理解它们的差异.通过阅读官方文档,我没有得到很好的理解.

Dio*_*lor 5

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

先说第一件事。偏移将水平或垂直移动视图类似于平移,但它用于永久结果。

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

mTop += offset;
mBottom += offset;
Run Code Online (Sandbox Code Playgroud)

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

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

Nick Butcher 在这个不错的视频中解释了更多:https : //www.youtube.com/watch?v= 86p1GPEv_fY&t =5m42s

关于CoordinatorLayout您对孩子的任何更改设置边距吗?例如BottomSheetBehavior,不能很好地处理边距,因为它忽略了它们。我想这可能是你的情况。