web-dev-qa-db-ja.com

Android MotionLayoutの複数の遷移に関する問題

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>

助けてくれてありがとう。

宜しくお願いします

7
aba

私も同じ問題を抱えていました。私が見つけた解決策は、どのトランジションを選択することでした:

(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();//                
        });
6
close_file

アバは正しいと思います。また、1つのシーンファイルに複数のトランジションを追加するときに問題が発生します。理論的には、MotionLayoutはこれをサポートする必要があります。これは、すべての遷移に個別のトリガー(多くの場合、クリックまたはスワイプ)があるためです。多分これは修正する必要があるMotionLayoutのバグです。私の経験では、シーンファイルで発生した最初のトランジションのみが処理されます。そのため、現在、レイアウトの説明(シーン)で複数の遷移をサポートする方法はないと思います。より具体的に言うと、すべてのモーションは同じトリガーで一度開始する必要があります。

0
codezombie