Android 如何有效地翻译一组视图?

Android 如何有效地翻译一组视图?,android,performance,android-animation,Android,Performance,Android Animation,我有一个包含多个视图的基本布局。我需要沿x轴平移它们。基本上有两种类型的平移发生,一种是沿着手指一直移动,另一种是在某个阈值后停止移动,这会产生一种很好的视差效果 因此,将共享相同转换逻辑的视图组放在另一个容器中,然后分别转换容器或每个视图,这样做更好吗 我知道这听起来很奇怪,但谷歌总是建议使用平面视图层次结构,因为重新绘制嵌套布局的成本很高,所以这是否意味着只保留一层嵌套并手动翻译每个视图更好 此外,这种转换适用于RecyclerView中的所有视图,而不仅仅是一个视图。我认为您应该按照Goo

我有一个包含多个视图的基本布局。我需要沿x轴平移它们。基本上有两种类型的平移发生,一种是沿着手指一直移动,另一种是在某个阈值后停止移动,这会产生一种很好的视差效果

因此,将共享相同转换逻辑的视图组放在另一个容器中,然后分别转换容器或每个视图,这样做更好吗

我知道这听起来很奇怪,但谷歌总是建议使用平面视图层次结构,因为重新绘制嵌套布局的成本很高,所以这是否意味着只保留一层嵌套并手动翻译每个视图更好


此外,这种转换适用于RecyclerView中的所有视图,而不仅仅是一个视图。

我认为您应该按照Google的建议保持平面布局,并分别转换每个视图。如果可以设置阈值,我会创建一个自定义视图。一旦设置好,您只需将手指的x位置传递给所有人,他们将决定是否移动。

如何实现它需要更多的输入或要求,然后再给出任何建议。除了性能问题,还应该考虑代码的可维护性

根据我的经验。拥有高端手机和高API级别(约>=21),他们有更好的硬件、有效的内存管理方式和后台任务。对于一些简单的动画来说,您提到的重新绘制成本很高的问题似乎不太重要。在这种情况下,代码可维护性具有更高的优先级,我将决定使用一个额外的
FrameLayout
容器,包装具有相同动画的
视图,因为代码=>逻辑更少。在这种情况下,0或2
FrameLayout
在性能上没有明显差异

关于低端设备,如果您想针对较低的API用户,性能将成为头等大事。现在,您提到的两种情况都会对性能产生影响,一种需要更多内存来存储更多视图,另一种需要更多CPU来运行动画。现在是进行权衡的时候了。在您的情况下,如果在
RecyclerView
中的任何项目上运行两个translate动画,我更愿意创建两个在2
视图上运行的单独动画。通过这种方式,我可以保存一堆额外的容器=>保存内存,动画不会针对所有项目运行,因此它只会在动画期间的一小部分时间内影响CPU


总之,对于每个案例,你有不同的方法,为你选择的案例选择一个最优先的,改进它,牺牲对整个问题影响较小的其他方法。没有一个解决方案是100%完美的,在编码时总是会出现权衡的情况

只是为了澄清一下,您是在寻找与此类似的东西吗@cjnash不,不是这样,它更像是向右滑动聊天泡泡,以显示收到它们的时间。谢谢你的建议,但我很想听到更多关于为什么使用一个选项而不是另一个选项的信息。