AndroidでMotionLayoutをいじっています。アルファ2バージョンを使用しています。
'com.Android.support.constraint:constraint-layout:2.0.0-alpha2'
2つの異なるボタンクリックに反応して、それぞれのボタンのアニメーションをトリガーしたいと思います。現在のアプローチでは、Transitions
に2つのMotionScene
を設定し、それぞれにOnClick
トリガーを設定しています。
問題は、最初の遷移しか見つからないように見えることです。 2つ目は何も起こりません。私は何か間違っているのですか、それともMotionScene
ごとに1つの遷移を設定できますか?その場合、問題に対する別の解決策はありませんか?
ここに私のモーションシーンの重要な部分があります
<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>
助けてくれてありがとう。
宜しくお願いします
私も同じ問題を抱えていました。私が見つけた解決策は、どのトランジションを選択することでした:
(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();//
});
アバは正しいと思います。また、1つのシーンファイルに複数のトランジションを追加するときに問題が発生します。理論的には、MotionLayoutはこれをサポートする必要があります。これは、すべての遷移に個別のトリガー(多くの場合、クリックまたはスワイプ)があるためです。多分これは修正する必要があるMotionLayoutのバグです。私の経験では、シーンファイルで発生した最初のトランジションのみが処理されます。そのため、現在、レイアウトの説明(シーン)で複数の遷移をサポートする方法はないと思います。より具体的に言うと、すべてのモーションは同じトリガーで一度開始する必要があります。