133

まず、ステータス バーの背景をこげ茶色に設定し、ナビゲーション バーの背景をデフォルトの黒に設定しました。Material light テーマを使用しています。

デフォルトのトランジションを使用して新しいアクティビティを開始しActivityOptions.makeSceneTransitionAnimationていますが、ステータス バーとナビゲーション バーの両方が一時的に白くなり、その後正しい色に戻ることに気付きました。

ドキュメントによると:

トランジションの効果を最大限に引き出すには、呼び出しアクティビティと呼び出されたアクティビティの両方でウィンドウ コンテンツのトランジションを有効にする必要があります。それ以外の場合、呼び出し元のアクティビティが終了トランジションを開始しますが、ウィンドウのトランジション (スケールやフェードなど) が表示されます。

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);呼び出しアクティビティと呼び出されたアクティビティの両方で使用しています。

同様に、入力トランジションをスライドに変更すると、ステータス バーとナビゲーション バーの両方に一時的に白い背景のスライド トランジションが表示されます。

アクティビティ シーンのアニメーション遷移中にステータス バーとナビゲーション バーがアニメーション化されないようにするにはどうすればよいですか?

4

9 に答える 9

3

それらを共有する必要がありますActivityOptions.makeSceneTransitionAnimation.

例えば:

ActivityOptions.makeSceneTransitionAnimation(... Pair.create(activity.findViewById(android.R.id.window_status_bar), Window.STATUS_BAR_BACKGROUND_TRANSITION_NAME) 

(疑似失礼します。正確な android.R.id 値が手元にありません)

ビューを共有した後、適切な遷移を実行できます。

于 2014-10-31T01:22:23.620 に答える
0

これが私がやった方法です。と の両方をStatus Barと一緒に共有します。Navigation BarSharedElementTransitionImageView

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  View imageView = view.findViewById(R.id.iv);
  Resources resources = view.getResources();
  imageView.setTransitionName(resources.getString(R.string.transition_image_thumbnail));

  Pair<View, String> p1 = Pair.create(imageView, resources.getString(R.string.transition_image_thumbnail));

  Window window = getActivity().getWindow();

  View navigationBar = getActivity().findViewById(android.R.id.navigationBarBackground);
  View statusBar = getActivity().findViewById(android.R.id.statusBarBackground);

  Pair<View, String> p2 = Pair.create(statusBar, statusBar.getTransitionName());
  Pair<View, String> p3 = Pair.create(navigationBar, navigationBar.getTransitionName());

  ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(),
          p1, p2, p3);

  ActivityCompat.startActivity(getActivity(), intent, options.toBundle());
} else {
  startActivity(intent);
}
于 2016-07-20T00:23:20.323 に答える
0

androidx と find を使用している人が機能し
fade.excludeTarget(android.R.id.navigationBarBackground, true);
ない場合は、このウィンドウがこの ID のビューを見つけられないという理由だけで、 に置き換える必要があります this.excludeTarget(androidx.appcompat.R.id.action_bar_container,true)

しかし、今はナビゲーションの時間です。今までこれを知るのはとても悲しいです.

于 2021-04-19T18:28:07.950 に答える