私は、横向きでも縦向きでも実行できるいくつかの「通常の」アクティビティを備えたアプリを持っています。彼らはのために設計され、主に肖像画に使用されます。
このアプリには、カメラを使用する単一のアクティビティがあり、横向きにロックされています。私はこのアクティビティを画像とテキストを90度回転させることで縦向きに「シミュレート」しているため、他のアクティビティのように見えます。
Samsung Galaxy Tab 7やGalaxy S3などの一部のデバイスでは、通常の縦向きのアクティビティからカメラの横向きのアクティビティに移動したり戻ったりすると、回転アニメーションが表示されます 。横向きのアクティビティは縦向きの状態をシミュレートするため、これはユーザーを混乱させます。
この回転アニメーションを削除する方法はありますか?理想的には、デフォルトの縦向きから縦向きのアニメーションに変更したいのですが、回転アニメーションを削除するだけで十分です。
私はもう試した
overridePendingTransition(0, 0);
その方法の他のバリエーションは成功していません。
[追加]
@ igalarzab、@ Georg、@ Joeの提案に従って、私はこれを行いました(まだ運がありません)。
私はこれらの結果を得ました:
[ビデオ]
無効にするアニメーションを表示するビデオをアップロードしました。これは、携帯電話を縦向きにしたまま、カメラアクティビティ(横向きにロック)から他のアクティビティに変更すると発生します。
回転アニメーションを制御する方法はありません。これは、アプリの外の方法で行われます。ウィンドウマネージャーの深部で、現在の画面のスクリーンショットを取得し、その背後にあるUIのサイズを変更して再構築します。次に、組み込みのアニメーションを実行して、元のスクリーンショットから再構築された新しいスクリーンショットに移行しますUI。画面の回転が変化したときにこの動作を変更する方法はありません。
これは、ストックカメラアプリが回転アニメーションを無効にする方法です。
private void setRotationAnimation() {
int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
winParams.rotationAnimation = rotationAnimation;
win.setAttributes(winParams);
}
注: APIリファレンス および以下のコメントによると、これは機能するだけです。
FLAG_FULLSCREEN
にWindowManager.LayoutParams
フラグが設定されていますAndroidManifestでAndroid:configChanges
というプロパティを設定して、コードで管理する変更を決定できます。このようにして、回転変更アニメーションは無効になり、onConfigurationChanged
のメソッドActivity
で必要に応じてそれを処理できます。
<activity
Android:name=".MySuperClass"
Android:label="@string/read_qrcode"
Android:screenOrientation="portrait"
Android:configChanges="orientation" />
それをmainActivityに入れて、回転アニメーションをキャンセルしました。
@Override
public void setRequestedOrientation(int requestedOrientation) {
super.setRequestedOrientation(requestedOrientation);
int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT;
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
winParams.rotationAnimation = rotationAnimation;
win.setAttributes(winParams);
}
詳細 こちら 。
あなたはすでにこれを試したかもしれませんが、念のため:
「何もしない」アニメーションを定義し、そのIDを使用してoverridePendingTransition()
を呼び出します。多分次のようなもの:
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fillAfter="true">
<translate
Android:fromXDelta="0"
Android:toXDelta="0"
Android:duration="100" />
</set>
申し訳ありませんが、テストするGalaxyデバイスがありませんでした:)