7

カメラプレビューを利用するカメラアプリを構築しています。プレビューにフルスクリーンを使用するために、アクティビティをロックしました

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

現在、次の問題があります。フォームをレンダリングするか、ダイアログを表示する必要があるときはいつでも、ユーザーがデバイスを縦向きモードで使用している場合でも、常に横向きモードで表示されます。変換アニメーションを使用して edittext ビューを回転させようとしましたが、それらは正しく回転していますが、それでもフォーカスを合わせることができず、キーボードも常に横向きに表示されます :(

ここで道を見つける方法を何か知っていますか?

重要: 方向の検出はここでは問題ではありません。問題は、フォーム/ビュー/ビューグループとキーボードを回転させて使用できるようにするにはどうすればよいかということです。

どういうわけかそれが可能でなければならないことを知っています.samsungのカメラアプリ(Galaxy S3に付属)は、プレビューを回転させずにビューを回転させることができるので、可能でなければなりません! 見る:

http://www.letsgomobile.org/images/reviews/0186/galaxy-s3-camera.jpg

http://cdn2.mos.techradar.futurecdn.net//art/mobile_phones/Samsung/GalaxyS3/Galaxy%20Fire/Samsung_Galaxy_S3_25-580-100.JPG

4

6 に答える 6

2

Samsung カメラ アプリケーションは、方向センサーで方向変更リスナーを使用しています。ユーザーが設定からデバイスの回転をブロックした場合でも、回転は発生します。

完全なカスタム ウィジェットを作成する必要があるため、Dialog でビルドを使用することはできず、CustomDialog を表示する必要があります ....

基本的な考え方は、OrientationEventListener と SensorManager を使用することです。デバイスの回転では、UI を更新し、新しい向きでビューを回転させる必要があります。ここでは、OrientationEventListener の使用に関するチュートリアルを示します。OrientationEventListener の使用方法 ほとんどのカメラ アプリでは、アクティビティはまだ LANDSCAPE でブロックされています。すべてのカメラ アプリケーションは、回転に伴う SurfaceView のサイズ変更の処理を容易にするために、このトリックを実行します。

于 2012-12-27T09:52:04.027 に答える
2

このプロパティを設定することで

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

画面を横向きのみにロックしています。この後、ユーザーがデバイスを縦向きモードで保持していても、縦向きモードに回転しません。あなたの問題についての私の理解に従って、あなたは1つのことを行うことができます。

android:configChanges="orientation"

menifest ファイルで、この上記のプロパティをアクティビティに追加します。また、Activity クラスのオーバーライド onConfigurationChange メソッドでは、アクティビティをランドスケープにロックする代わりに、必要に応じて向きの変更を処理できます。

私があなたの問題を正しく理解していれば、それはあなたを助けるかもしれません.

于 2012-12-24T14:00:02.617 に答える
0

デバイスを回転させてアクティビティの動作をオーバーライドする必要があります。mafinestにorientationChangeを追加してから、このイベントのリスナーを追加し、ビューを手動で回転させる必要があります。

また、この方法を使用すると、すべてのダイアログなど(システムビュー)が正しい方法で表示されます。

これを確認してください:http: //developer.android.com/reference/android/app/Activity.html#ConfigurationChanges

そしてこれ: 進行状況ダイアログとバックグラウンドスレッドがアクティブなときに画面の向きの変更を処理する方法は? (私が思う2番目の答え)

于 2012-12-18T14:47:45.793 に答える
0

afaik: 回転は、方向イベントをキャッチし、その方向に応じて新しいレイアウトで画面を膨らませることによって実現されます。

  1. 横向きに膨らませる
  2. 回転が発生する
  3. 変更したい画面の部分を膨らませます。例えば、横向きではなく縦向きボタンの新しいレイアウトでボタンのホルダー ビューを膨らませます。

実行時に一緒に追加するパーツにレイアウトを分割する必要があります。

これを実現する別の方法は、たとえばカメラ プレビューにサーフェス ビューを使用し、別のレイアウトを使用してサーフェスを保持し、その上にフレーム レイアウトを追加することです。

于 2012-12-27T08:13:40.363 に答える
0

マニフェスト ファイルで、カメラ プレビュー アクティビティに以下のプロパティを指定して、 android:configChanges="keyboardHidden|orientation"詳細を確認してください。

<activity
        android:name=".Your_Activity_Name"
        android:configChanges="keyboardHidden|orientation"
        android:label="@string/app_name" >
        <intent-filter>
            <!-- Your filter attributes if any. -->
        </intent-filter>
    </activity>

そして、あなたのアクティビティクラスでオーバーライドonConfigurationChangedして、このような画面の向きモード(例えば、横向きまたは縦向き)で(あなたの必要に応じて)必要なことを行います_

@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();
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        //Your code to do the other things in landscape mode...

     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
         Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
       //Your code to do the other things in portrait mode...

     }
 }

これが問題を解決するのに役立つことを願っています。

于 2012-12-27T07:24:08.330 に答える
0

別のアクティビティをダイアログとして使用し、そのプロパティ (方向とテーマ) をメニフェストに設定して使用することをお勧めします。

于 2012-12-26T20:48:34.297 に答える