我正在使用ConstraintLayout处理复杂的UI,其中有多个视图/菜单(包含按钮,textviews,窗口小部件等),从底部/屏幕外的不同点击事件动画。每个菜单都有不同的约束和动画。现在我面临着多个问题。
默认情况下,所有菜单都将隐藏/关闭。因此很难设计/更新布局,因为每次我需要首先处理菜单时,我必须更新其约束和附加到其上的所有视图的约束以在LayoutEditor中显示。哪个很麻烦
动画问题。所有这些视图都从屏幕底部动画显示。我找到了两种使用ConstraintLayout为视图设置动画的方法。
首先是按原样复制布局文件,只需将约束更改为动画
val constraintSet1 = ConstraintSet()
onstraintSet1.clone(constraintLayout)
val constraintSet2 = ConstraintSet()
constraintSet2.clone(this, R.layout.activity_main_alt)
TransitionManager.beginDelayedTransition(constraintLayout)
val constraint = if (changed) constraintSet1 else constraintSet2
constraint.applyTo(constraintLayout)
这种方法的问题是我需要复制xml文件。由于我有10个需要从底部动画的视图,所以我必须创建10个布局文件。此外,与编程相比,还存在性能问题,因为动画开始时稍有延迟。
其他方法是通过以编程方式设置约束来完成所有这些动画。
ConstraintSet set = new ConstraintSet();
set.connect(R.id.myButton, ConstraintSet.BOTTOM,
ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 0);
set.connect(R.id.myButton, ConstraintSet.RIGHT,
ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 0);
set.constrainWidth(R.id.myButton, ConstraintSet.WRAP_CONTENT);
TransitionManager.beginDelayedTransition(constraintLayout)
set.applyTo(myLayout);
对于20到30个视图和菜单,也很难设置。但我发现这种方法非常有效,因为我不需要复制xml文件加上我发现它更好的性能,因为在这种情况下动画以毫秒开始没有任何延迟。
在我的情况下,哪个是最好的方法,我在一个平面约束布局文件中维护和动画有超过30个视图?