2013-08-19 1 views
5

私はアクティビティでフルスクリーンのビットマップを表示するアプリを持っています。高速の読み込み時間を提供するために、私はそれらをメモリにロードします。しかし、画面の向きが変わったら、キャッシュをクリアして新しいディメンションの内側に収まるビットマップをもう一度埋めたいと思います。唯一の問題は、これを行うために、向きが変わったときを検出する必要があることです。誰もこれを検出する方法を知っていますか?デバイスがポートレートモードからランドスケープモードに切り替わるときを検出するにはどうすればよいですか?

+1

[の可能重複Androidのレイアウトの向きの変化を検出する方法は?](http://stackoverflow.com/questions/5726657/how-to-detect-orientation-change-in-layout-in -android) – Sam

答えて

23

は、それが実際に新しいビューを作成し、のonCreateが再び呼び出される変更http://developer.android.com/guide/topics/resources/runtime-changes.html

公式ドキュメントを参照してください。

さらに、あなたはこれは設定変更であるヌル手段ではない場合は、お使いのonCreate方法からonSavedInstanceStateを確認することができます

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

すばらしい答えに感謝します! –

+4

@noone:このメソッドは、マニフェストの android.R.attr#configChanges属性で処理したい設定を選択した場合にのみ呼び出されることに注意してください。 javadocを参照してください! – user504342

+0

ありがとう、これも私のために働く。 – Suniel

2

通常、方向変更はOnCreate()を呼び出します。

ここにロジックを置くことができます。

+0

もちろん、onCreateを呼び出すたびにキャッシュをリロードしないようにするにはどうすればいいですか? onCreateは、例で電話をかけた後にアクティビティを再作成した後に呼び出すことができ、この状況ではキャッシュを再ロードしないでください。 –

+1

@Poplitou 'onSavedInstanceState'についてのsiikの回答を参照してください。また、http://stackoverflow.com/questions/4096169/onsaveinstancestate-and-onrestoreinstancestate – sealz

+0

ありがとうたくさんのリンクのために –

3

を経由して、それを確認することができます。

+0

さて、私はこのことを知る方法を見て、偉大な答えをありがとう! –

3

もう1つのアプローチは、OrientationEventListenerを使用しています。

このように使用することができます:向きを確認するには

OrientationEventListener mOrientationEventListener = new OrientationEventListener(
      this, SensorManager.SENSOR_DELAY_NORMAL) { 

     @Override 
     public void onOrientationChanged(int orientation) { 
      //checking if device was rotated 
      if (orientationPortrait != isPortrait(orientation)) { 
       orientationPortrait = !orientationPortrait; 
       Log.d(TAG, "Device was rotated!"); 
      } 
     } 
    }; 

private boolean isPortrait(int orientation) { 
    return (orientation >= (360 - 90) && orientation <= 360) || (orientation >= 0 && orientation <= 90); 
} 

そしてリスナーを有効または無効にすることを忘れないでください:

if (mOrientationEventListener != null) { 
     mOrientationEventListener.enable(); 
    } 

if (mOrientationEventListener != null) { 
     mOrientationEventListener.disable(); 
    } 
+0

私は構成の変更は1つのことだと思います。この場合、onConfigurationChangedは方法です。しかし、オリエンテーションの変更をロックしても通知を受けたい場合は、オリエンテーションリスナーが最適です。ありがとうBogdan。 – Murciegalo84

関連する問題