2

私のカメラ アプリでは、UI の向きが縦に固定されています。

camera.setdisplayorientation(90) を設定することで、プレビューが横向きと縦向きの両方で正しく表示されるようになりました。

写真を撮ってファイルに保存できます。ImageViewで表示したところ、横向きで撮った写真が正しく表示されました。(私の左側の電話の上部)

でも… 縦向きで撮ったものは運が悪い… 左に90度回転して見える。

EXIFヘッダーを設定できるように、センサーを介してデバイスの向きを検出しようとしていますが...これまでのところ...これを達成するのは難しすぎます...この問題を解決するのに役立つ人はいますか?

4

1 に答える 1

4

getRotation メソッドを使用します。

Display display = ((WindowManager)
context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();

ドキュメントから:

Returns the rotation of the screen from its "natural" orientation. 
The returned value may be Surface.ROTATION_0 (no rotation), Surface.ROTATION_90, Surface.
ROTATION_180, or Surface.ROTATION_270. 
For example, if a device has a naturally tall screen, and the user has turned it on its side to go into a landscape orientation, the value returned here may be either Surface.ROTATION_90 or Surface.ROTATION_270 depending on the direction it was turned. 
The angle is the rotation of the drawn graphics on the screen, which is the opposite direction of the physical rotation of the device.
For example, if the device is rotated 90 degrees counter-clockwise, to compensate rendering will be rotated by 90 degrees clockwise and thus the returned value here will be Surface.ROTATION_90.

getRotation は Android 2.2 から導入されました。ターゲットが古いデバイスの場合は、getOrientation を使用します。

ここに回答フォームがあります: Android デバイスの向きを検出する方法は?

デバイスの向きを検出するだけの場合は、OrientationEventListener を使用できます。

公式ドキュメントは次のとおりです。 http://developer.android.com/reference/android/view/OrientationEventListener.html#onOrientationChanged(int)

ただし、何かを使用する前に、Android での向きの処理に関する次の優れたブログ投稿を確認して ください。

于 2012-10-07T15:06:43.507 に答える