6

2 つのアクティビティ間の遷移を定義したいと思います。私の目標は、アクティビティ間で画像と 2 つのテキストを共有することですが、テキストのアークモーションを定義したい (そして画像の changeBounds を保持したい)。

私は次のようにスタイルを設定しました:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="android:windowActivityTransitions">true</item>
    <item name="android:windowContentTransitions">true</item>

    <item name="android:windowSharedElementsUseOverlay">false</item>
    <item name="android:windowAllowEnterTransitionOverlap">true</item>
    <item name="android:windowAllowReturnTransitionOverlap">true</item>
</style>

<style name="AppTheme.DetailActivity" parent="AppTheme">
    <item name="android:windowExitTransition">@transition/detail_exit</item>
    <item name="android:windowEnterTransition">@transition/detail_enter</item>

    <item name="android:windowSharedElementEnterTransition">@transition/detail_shared_enter</item>
    <item name="android:windowSharedElementExitTransition">@transition/detail_shared_exit</item>
</style>

次のように DetailActivity を開始します。

                ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,
                Pair.create(findViewById(R.id.image), "image"),
                Pair.create(findViewById(R.id.text), "text"));
            Intent intent = new Intent(MainActivity.this, DetailActivity.class);
            startActivity(intent, options.toBundle());

問題は、この detail_shared_enter がアニメーションに適用されないことです:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="@android:integer/config_mediumAnimTime">

<arcMotion android:minimumHorizontalAngle="45"
           android:minimumVerticalAngle="45">
    <targets>
        <target android:targetId="@id/image2"/>
    </targets>
</arcMotion>

<autoTransition>
    <targets>
        <target android:excludeId="@id/image2"/>
    </targets>
</autoTransition>
</transitionSet>

これにより、共有要素はアニメーションなしで最終的な位置に表示されます。windowEnterTransition が機能します。

事前に助けてくれてありがとう!

更新: このチュートリアルに基づいて解決策を見つけました: https://blog.stylingandroid.com/curved-motion-part-1/

解決策は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
           android:transitionOrdering="together">

<changeBounds>
    <targets>
        <target android:excludeId="@id/image2"/>
    </targets>
</changeBounds>

<changeBounds>
    <targets>
        <target android:targetId="@id/image2"/>
    </targets>

    <arcMotion android:maximumAngle="90"
               android:minimumHorizontalAngle="90"
               android:minimumVerticalAngle="0"/>
</changeBounds>

</transitionSet>
  1. 後で定義するものを除くアニメーションを定義する必要があります。
  2. changeBounds の内側に arcMotion を配置します。
  3. 最も重要なこと: 「arcMotion はここでは許可されていません」という弱い警告を無視してください!
4

0 に答える 0