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

时间:2018-05-22 15:41:37

标签: android performance android-animation

我有一个包含多个视图的基本布局。我需要沿x轴平移它们。基本上有两种类型的翻译发生在一直跟在手指之后,一种在一定的阈值之后停止,这提供了一个很好的视差效果。

那么将共享相同翻译逻辑的视图组放在另一个容器中并翻译容器或单独翻译每个视图会更好吗?

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

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

2 个答案:

答案 0 :(得分:1)

我认为您应该像Google推荐的那样保持平面布局,并单独翻译每个视图。我会创建一个自定义视图,你可以设置一个阈值。一旦设置,你可以简单地将手指的x位置传递给所有人,然后他们决定是否应该移动。

答案 1 :(得分:1)

在提出任何建议之前,如何实施它需要更多输入或要求。除了性能问题,还应考虑代码可维护性。

根据我的经验。凭借高端手机和高API级别(约> = 21),他们拥有更好的硬件,有效的方式来管理内存和后台任务。您提到的问题/customer/**对于一些简单的动画似乎并不太重要。在这种情况下,代码可维护性具有更高的优先级,我将决定有一个额外的/**容器,包装具有相同动画的ROLE_TEST,因为你有更少的代码=>逻辑少。在这种情况下,0或2 if (ddlcountry.Items.Contains(ddlcountry.Items.FindByValue(drJob["Country"].ToString())) == true) { ddlcountry.SelectedValue = drJob["Country"].ToString(); //if available it assigns the value } 在性能上没有明显的差异

关于低端设备,如果您希望定位较低的API用户,性能将成为首要任务。现在你提到的两种情况都会影响性能,一种需要更多的内存来存储更多的expensive to redraw,一种需要更多的CPU来运行动画。是时候进行权衡了。如果您在FrameLayout中的任何项目上运行2个翻译动画,我更喜欢在2 View上创建2个单独的动画。这样我可以节省一堆额外的容器=>保存内存,动画不会针对所有项目运行,因此它只会在动画期间影响CPU一小段时间。

总而言之,对于每种情况,您都有不同的方法,为您选择的案例选择最高优先级,改进它,牺牲对整体问题影响较小的其他案例。没有解决方案100%完美,权衡情况总是在编码时发生