Android APIレベル21の2つのアクティビティの間の1つのImageViewを別の位置にアニメーション化しようとしています。Android Lプレビューの「MoveImage」が削除されたため、代わりに " ChangeImageTransform "を使用しますが、ドキュメント内のサンプルコードは機能しません(2つの画像が個別にアニメーション化されます)。
<transitionSet xmlns:Android="http://schemas.Android.com/apk/res/Android">
<changeImageTransform>
<targets>
<target Android:targetId="@id/ivA" />
<target Android:targetId="@id/ivB" />
</targets>
</changeImageTransform>
</transitionSet>
実用的な例はありますか?ありがとう!
共有要素を持つ2つのアクティビティ間で画面遷移アニメーションを作成するには、 この記事 を読み、前述の手順に従います。
- テーマでウィンドウコンテンツの遷移を有効にします。
- スタイルで共有要素の遷移を指定します。
- 遷移をXMLリソースとして定義します。
- Android:transitionName属性を使用して、両方のレイアウトの共有要素に共通の名前を割り当てます。
- ActivityOptions.makeSceneTransitionAnimation()メソッドを使用します。
ドキュメント によると、3番目のステップについて:
ChangeBoundsと組み合わせて、ChangeImageTransformを使用すると、サイズ、形状、またはImageView.ScaleTypeを変更するImageViewでコンテンツをスムーズにアニメーション化できます。
Res/transition/your_transition.xmlは次のようになります。
<transitionSet xmlns:Android="http://schemas.Android.com/apk/res/Android">
<changeBounds>
<targets>
<target Android:targetId="@id/ivA" />
<target Android:targetId="@id/ivB" />
</targets>
</changeBounds>
<changeImageTransform>
<targets>
<target Android:targetId="@id/ivA" />
<target Android:targetId="@id/ivB" />
</targets>
</changeImageTransform>
</transitionSet>
または、ivAとivBのみをアニメーション化する必要がある場合は、単に次のようにします。
<transitionSet xmlns:Android="http://schemas.Android.com/apk/res/Android">
<changeBounds/>
<changeImageTransform/>
</transitionSet>
このガイド、他のいくつか、および参照資料に従って、これを機能させました。
このスタイルのトランジションセット。これを解像度/遷移の下に置きます:
<transitionSet xmlns:Android="http://schemas.Android.com/apk/res/Android">
<changeBounds>
<targets>
<target Android:targetId="@id/ivA" />
<target Android:targetId="@id/ivB" />
</targets>
</changeBounds>
<changeImageTransform>
<targets>
<target Android:targetId="@id/ivA" />
<target Android:targetId="@id/ivB" />
</targets>
</changeImageTransform>
</transitionSet>
ソースおよびターゲットのImageViewsで、名前タグを追加する必要があります。名前は同じでなければなりません。
<ImageView
...
Android:transitionName="MYTRANSITIONVIEW"
/>
Styles.xmlで、アプリケーションテーマに追加します。
<item name="Android:windowContentTransitions">true</item>
<item name="Android:windowActivityTransitions">true</item>
<item name="Android:windowSharedElementEnterTransition">@transition/my_transition</item>
<item name="Android:windowSharedElementExitTransition">@transition/my_transition</item>
これをフラグメント内で実行しているので、次のような新しいアクティビティを開始します。
Bundle bundle = null;
if (activity != null) {
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity, Frag2_, "MYTRANSITIONVIEW");
bundle = options.toBundle();
}
activity.startActivity(i, bundle);
API 21クライアントで動作します。 XMLタグが無効であるため、API 16クライアントでは機能しませんでした。
これがお役に立てば幸いです。
わずかな更新、終了時に逆の遷移を取得するには、私は呼び出す必要がありました
supportFinishAfterTransition();
finish();ではなく