2

バックグラウンド

Lollipop では、アクティビティ間を移行する新しい方法が導入されています (リンクはこちらこちらこちらこちら) 。

問題

ビデオの 1 つ (ここ) で、各ビューがどのように遷移するかを正確に選択できると彼らは言いましたが、その方法を見つけることができません。私が見つけた唯一のことは、「ヒーロー」ビュー(新しいアクティビティに移行して元に戻す方法を選択する)を除く、すべてのビューに設定する方法です。

たとえば、次の画面を持つ Google Now アプリを見てみましょう。 ここに画像の説明を入力

editText をクリックすると、一番下のカードに「爆発」効果がありますが、すべてが暗くなり、editText の背後にある imageView がフェードアウトします。

editText はおそらく、アクティビティ間を遷移する「ヒーロー」ビューであり、画面上の同じ場所にあるため、おそらくユーザーに視覚的な効果はありません。

私が試したこと

Google が現在行っていることを模倣しようとしましたが、私が書いたように、imageView にも「爆発」効果があるため、listView の後ろの一番下に移動します。これは奇妙な効果です (途中でトリミングされるため)アニメーション)。別の方向にアニメーション化するか、単にフェードアウトすることをお勧めします。

私が使用しているトランジションのサンプルコードは次のとおりです。

    final Intent intent = new Intent(activity, SearchActivity.class);
    ViewCompat.setTransitionName(viewToTransitionFromAndTo, VIEW_TO_TRANSITION_TO);
    final ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
            viewToTransitionFromAndTo, VIEW_TO_TRANSITION_TO);
    ActivityCompat.startActivityForResult(activity, intent, requestCode, options.toBundle());

他の活動を開始する活動のテーマで、私はこれを持っています:

<style name="AppTheme.transition" parent="@style/AppTheme">

    <!-- transition support -->
    <item name="android:windowContentTransitions" tools:targetApi="21">true</item>
    <item name="android:windowActivityTransitions" tools:targetApi="21">true</item>
    <item name="android:windowEnterTransition" tools:targetApi="21">@transition/explode</item>
    <item name="android:windowExitTransition" tools:targetApi="21">@transition/explode</item>
    <item name="android:windowSharedElementEnterTransition" tools:targetApi="21">@transition/move_image</item>
    <item name="android:windowSharedElementExitTransition" tools:targetApi="21">@transition/move_image</item>
    <item name="android:windowAllowReturnTransitionOverlap" tools:targetApi="21">true</item>
    <item name="android:windowAllowEnterTransitionOverlap" tools:targetApi="21">false</item>
</style>

遷移ファイルは次のとおりです。

爆発.xml

<?xml version="1.0" encoding="utf-8"?>
<explode />

move_image.xml

<?xml version="1.0" encoding="utf-8"?>
<transitionSet>

    <changeBounds />

    <changeImageTransform />

</transitionSet>

質問

すべてが同じ効果を持つように言うだけでなく、遷移時に各ビューが何をするかを選択するにはどうすればよいですか (「ヒーロー」ビューを除く)。

たとえば、「ヒーロー」ビューを除くすべてのビューで「分解」トランジションを選択することは可能ですか?

それを行う方法の例を示してください。必要に応じて、上で書いたコードを使用できます。

4

1 に答える 1

1

を使用し、TransitionSetおよび を使用して特定のターゲットを追加/除外Transition#addTarget()Transition#excludeTarget()ます。たとえば、2 つのビューがあり、それぞれを異なる方向に画面からスライドさせたいとします。次のコードを使用して、このようなトランジションを作成できます。

TransitionSet set = new TransitionSet();

Transition slideUp = new Slide(Gravity.UP);
slideUp.addTarget(view1);
set.addTransition(slideUp);

Transition slideDown = new Slide(Gravity.DOWN);
slideDown.addTarget(view2);
set.addTransition(slideDown);

TransitionSet extends Transitionであるため、結果のsetオブジェクトをウィンドウ コンテンツ トランジションとして使用できます。これにより、2 つのスライド トランジションが同時に並行して再生されます。

于 2014-12-31T22:31:00.420 に答える