Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ConstraintSet动画通过xml与编程实现_Android_Animation_Android Xml_Android Constraintlayout - Fatal编程技术网

Android ConstraintSet动画通过xml与编程实现

Android ConstraintSet动画通过xml与编程实现,android,animation,android-xml,android-constraintlayout,Android,Animation,Android Xml,Android Constraintlayout,我正在使用ConstraintLayout处理一个复杂的UI,其中有多个视图/菜单(包含按钮、文本视图、小部件等)在不同的点击事件上从底部/屏幕外进行动画。每个菜单都有不同的约束和动画。现在我面临着多个问题 默认情况下,所有菜单都将隐藏/屏幕外。因此,设计/更新布局很困难,因为每次我需要首先处理菜单时,我必须更新其约束以及附加到它的所有视图的约束,以在LayoutEditor中显示。哪个比较麻烦 动画问题。所有这些视图都从屏幕底部设置动画。我发现了两种使用ConstraintLayout设置视图

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

  • 默认情况下,所有菜单都将隐藏/屏幕外。因此,设计/更新布局很困难,因为每次我需要首先处理菜单时,我必须更新其约束以及附加到它的所有视图的约束,以在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多个视图要在单个平面约束布局文件中维护和设置动画