[解決済み] アクティビティシーンのアニメーション遷移中にステータスバーやナビゲーションバーがアニメーションしないようにするにはどうしたらいいですか?
質問
まず、ステータスバーの背景がダークブラウンに設定されており、ナビゲーションバーの背景がデフォルトの黒になっています。私は Material light テーマを使用しています。
新しいアクティビティを
ActivityOptions.makeSceneTransitionAnimation
を使用して新しいアクティビティを開始していますが、ステータス バーとナビゲーション バーの両方が一時的に白にフェードし、その後正しい色に戻ることに気づきました。
によると のドキュメントによると :
遷移の効果を完全に得るには、呼び出し側と呼び出される側の両方のアクティビティでウィンドウ コンテンツ遷移を有効にする必要があります。そうしないと、呼び出し側のアクティビティは終了時の遷移を開始しますが、その後、ウィンドウ遷移(スケールやフェードなど)が表示されます。
私は
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
を呼び出しているアクティビティと呼び出されたアクティビティの両方で使用しています。
同様に、Enter トランジションをスライドに変更すると、ステータス バーとナビゲーション バーの両方で、白い背景を持つスライド トランジションが簡単に表示されます。
アクティビティ シーンのアニメーション遷移中に、ステータス バーとナビゲーション バーがアニメーション化しないようにするにはどうしたらよいですか?
どのように解決するのですか?
遷移中にナビゲーション/ステータス バーがアニメーションするのを防ぐために、私が知っている限りでは、2 つのアプローチがあります。
アプローチ #1: ウィンドウのデフォルトの終了/入力フェード遷移からステータス バーとナビゲーション バーを除外する
移行中にナビゲーション バーとステータス バーがフェードイン/アウトする理由は、デフォルトでは、移行が始まると、すべての非共有ビュー (ナビゲーション/ステータス バーの背景を含む) が、呼び出し/呼び出されたアクティビティでそれぞれフェードアウト/フェードアウトするからです。しかし、ナビゲーション/ステータスバーの背景をウィンドウのデフォルトの exit/enter から除外することで、簡単にこれを回避することができます。
Fade
のトランジションから除外することで簡単に回避できます。次のコードをActivitysの
onCreate()
メソッドに追加します。
Transition fade = new Fade();
fade.excludeTarget(android.R.id.statusBarBackground, true);
fade.excludeTarget(android.R.id.navigationBarBackground, true);
getWindow().setExitTransition(fade);
getWindow().setEnterTransition(fade);
この遷移は、アクティビティのテーマでXMLを使って宣言することもできます(つまり、あなた自身の
res/transition/window_fade.xml
ファイルで)。
<?xml version="1.0" encoding="utf-8"?>
<fade xmlns:android="http://schemas.android.com/apk/res/android">
<targets>
<target android:excludeId="@android:id/statusBarBackground"/>
<target android:excludeId="@android:id/navigationBarBackground"/>
</targets>
</fade>
アプローチ2:ステータスバーとナビゲーションバーを共有要素で追加する
このアプローチは、klmprtの回答から構築されています。 ほとんど 私はまだ2つの修正をする必要がありましたが。
呼び出したActivityでは、次のコードを使ってActivityを開始しました。
View statusBar = findViewById(android.R.id.statusBarBackground);
View navigationBar = findViewById(android.R.id.navigationBarBackground);
List<Pair<View, String>> pairs = new ArrayList<>();
if (statusBar != null) {
pairs.add(Pair.create(statusBar, Window.STATUS_BAR_BACKGROUND_TRANSITION_NAME));
}
if (navigationBar != null) {
pairs.add(Pair.create(navigationBar, Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME));
}
pairs.add(Pair.create(mSharedElement, mSharedElement.getTransitionName()));
Bundle options = ActivityOptions.makeSceneTransitionAnimation(activity,
pairs.toArray(new Pair[pairs.size()])).toBundle();
startActivity(new Intent(context, NextActivity.class), options);
ここまでは、klmprtさんが回答で提案したものと基本的に同じです。しかし、私はまた、私の呼ばれたアクティビティに次のコードを追加する必要がありました。
onCreate()
メソッドに、移行中にステータス バーとナビゲーション バーが "点滅するのを防ぐために、次のコードを追加する必要がありました。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
// Postpone the transition until the window's decor view has
// finished its layout.
postponeEnterTransition();
final View decor = getWindow().getDecorView();
decor.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
decor.getViewTreeObserver().removeOnPreDrawListener(this);
startPostponedEnterTransition();
return true;
}
});
}
ステータス バーとナビゲーション バーの背景を共有要素として追加すると、ウィンドウのデフォルトの終了/入力フェード遷移の上に描画されるようになり、遷移中にフェードしないことを意味します。この方法についての詳しい説明は この Google+ の投稿 .
関連
-
gitlab 設定エラー。リモートリポジトリから読み込めなかったか、ホストキーの検証に失敗しました。
-
AndroidStudio3.0 Error:Execution failed for task ':app:processDebugResources'.
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
アプリケーションがメインスレッドで過剰に作業している可能性があります。
-
エラー:未宣言の識別子(AS)の使用
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
AndroidStudioのショートカット 検索/置換
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する
-
[解決済み] 既存のカスタムテーマでXMLのアクティビティのタイトルバーを非表示にする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb シェルがデバイスのオフラインを求めるプロンプトを表示する
-
NetworkOnMainThreadException
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
アプリケーションがメインスレッドで過剰に作業している可能性があります。
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
問題 ---- Android ---- ActivityManager: Error: アクティビティクラス{xx/xx.MainActivity}が存在しない
-
アンドロイドシェイプ、グラデーション、角丸、ボーダーラインの設定
-
アンドロイドスタジオ学習入門
-
アンドロイドスタジオソフトウェア使用詳細説明書