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

标签 android android-layout

我正在使用 CoordinatorLayout,其中 subview 位置使用 ViewCompat.offsetLeftAndRightViewCompact.offsetTopAndBottom API 进行动画处理。

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

article提供了一个解决方案,通过在 subview 上设置布局监听器并恢复旧位置。

我注意到使用 setTranslationXsetTranslationY 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/

相关文章:

java - 生成 map 标记

android - 带 fragment 的垂直 ViewPager

android - 难以仅使用 .aidl 文件中的输出参数

android - 如果屏幕上没有水平空间,请转到下一个垂直可用空间?

android - 无法单击 CollapsingToolbarLayout 中的项目

android - 如何在 Android 应用程序 UI 上获取带阴影的框?

java - TextView中的Android文本单词之间的距离很长

php - 连接错误的 json 异常

android - Xamarin 形成 Android 目标 API 级别警告

Android Shape - 渐变应该到右边