Android MotionLayout中的多个过渡问题

aba*_*aba 6 animation android android-layout android-motionlayout

我正在玩Android中的MotionLayout。我正在使用Alpha 2版本。

'com.android.support.constraint:constraint-layout:2.0.0-alpha2'
Run Code Online (Sandbox Code Playgroud)

我想对两个不同的按钮单击做出反应,并为每个按钮触发一个动画。我目前的做法是设置两个TransitionsMotionSceneOnClick每一个触发器。

问题在于似乎只找到第一个过渡。对于第二个,什么也没有发生。我是在做错什么,还是可以只设置一个过渡MotionScene?如果是这样,是否有其他解决方案?

这是我的运动场景的重要部分

<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">

<Transition
    motion:constraintSetStart="@id/startHome"
    motion:constraintSetEnd="@id/endHome"
    motion:duration="300">
    <OnClick
        motion:mode="toggle"
        motion:target="@+id/imageView_bottom_home" />
</Transition>

<Transition
    motion:constraintSetStart="@id/startSearch"
    motion:constraintSetEnd="@id/endSearch"
    motion:duration="300">
    <OnClick
        motion:mode="toggle"
        motion:target="@+id/imageView_bottom_search" />
</Transition>

<ConstraintSet android:id="@+id/startSearch">
    <Constraint
        android:id="@id/imageView_bottom_search"
        ...startConstraints... />
</ConstraintSet>

<ConstraintSet android:id="@+id/endSearch">
    <Constraint
        android:id="@id/imageView_bottom_search"
        ...endConstraints... />
</ConstraintSet>

<ConstraintSet android:id="@+id/startHome">
    <Constraint
        android:id="@id/imageView_bottom_home"
        ...startConstraints... />
</ConstraintSet>

<ConstraintSet android:id="@+id/endHome">
    <Constraint
        android:id="@id/imageView_bottom_home"
        ...endConstraints... />
</ConstraintSet>
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

最好的祝福

clo*_*ile 6

我有同样的问题。我发现的解决方案是选择哪个过渡:

(在Java代码中)...

MotionLayout motionConteiner = findViewById(R.id.motion_container);
button1.setOnClickListener((v) -> {
            motionConteiner.setTransition(R.id.start1, R.id.end1);
            motionConteiner.transitionToEnd();//                
        });
button2.setOnClickListener((v) -> {
            motionConteiner.setTransition(R.id.start2, R.id.end2);
            motionConteiner.transitionToEnd();//                
        });
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的答复!我认为这是一种使其起作用的方法,但它使将动画的所有部分都包含在xml中的想法破灭了。基本上,xml中的过渡已经过时了。也许到现在为止不可能有多个过渡。 (2认同)