Android ConstraintSet动画通过xml vs编程

时间:2018-03-19 05:09:26

标签: android animation android-xml android-constraintlayout

我正在使用ConstraintLayout处理复杂的UI,其中有多个视图/菜单(包含按钮,textviews,窗口小部件等),从底部/屏幕外的不同点击事件动画。每个菜单都有不同的约束和动画。现在我面临着多个问题。

  1. 默认情况下,所有菜单都将隐藏/关闭。因此很难设计/更新布局,因为每次我需要首先处理菜单时,我必须更新其约束和附加到其上的所有视图的约束以在LayoutEditor中显示。哪个很麻烦

  2. 动画问题。所有这些视图都从屏幕底部动画显示。我找到了两种使用ConstraintLayout为视图设置动画的方法。

  3. 首先是按原样复制布局文件,只需将约束更改为动画

    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个视图?

0 个答案:

没有答案