2012-12-18 10 views
6

私はカメラのプレビューを利用するカメラアプリを構築しています。私は、フォームをレンダリングするか、私はダイアログを表示する必要がある時はいつでも、それは常に、ランドスケープモードで現れる:プレビュー用のフルスクリーンを使用するためには、私は今、私はこの問題を次のようしているandroid screen orientation:レイアウトの一部のみをロックする

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

で活動をロックユーザがポートレートモードで彼/彼女の装置を使用しているときでも。 トランスフォームアニメーションを使用してedittextビューを回転しようとしましたが、それらは正しく回転しましたが、それ以上フォーカスできなくなり、キーボードも常にランドスケープで表示されます:(

あなたはラウンドここに方法を見つけるの

重要:?向きを検出すると、ここでの問題ではありません質問は次のとおりです。私は、彼らはまだ使用可能であることを方法で、フォーム/ビュー/ viewgroupsとキーボードを回転させない方法を

私はそれが何とか可能でなければならないことを知っている:サムスンのカメラアプリ(ギャラクシーS3に付属)は、rなしでビューを回転することができるプレビューをしているので、可能なはずです! を参照してください:あなたは、あなたのデバイスを回転させることにより、アクティビティの動作を上書きするために、あなたはmafinestでorientationChangeを追加し、このイベントのリスナーを追加し、手動でビューを回転させる必要がありき

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

+0

実際のダイアログを使用する代わりに、新しいアクティビティを(アンドロイド:theme = "@ android:style/Theme.Dialog"を使って)対話として開始しようとしましたか?私は、この偽のダイアログは、あなたのカメラのアクティビティだけを横向きにロックしているので、通常のやり方で向きの変化に反応すると思う。残念ながら私は現時点でそれを試すことはできません。 – Audrius

+0

まだ試していません。それがうまくいくでしょう... – stoefln

+0

は動作しません - 試してみました:どのように私はデバイスを回転させているに関係なく、ダイアログアクティビティもランドスケープで表示されます – stoefln

答えて

2

サムスンカメラアプリケーションでそれの上に追加するには、別のレイアウトを使用することです方向センサー付きのリスナー。ユーザーがデバイスの回転を設定からブロックすると、回転はまだ発生します。

あなたは基本的な考え方はOrientationEventListener、およびSensorManagerを使用することです

....あなたはダイアログでビルドを使用することはできませんので、あなたがCustomDialogを示さなければならない、あなたの完全なカスタムウィジェットを作成が必要になります。デバイスローテーションでは、UIを更新し、ビューを新しい方向に回転させる必要があります。 OrientationEventListenerの使用に関するチュートリアルです。How to use OrientationEventListener ほとんどのカメラアプリケーションでは、アクティビティはLANDSCAPEでブロックされています。 回転を使ってSurfaceViewサイズの変更を簡単に処理できるように、すべてのカメラアプリケーションがこのトリックを行います。

+0

私はすでにOrientationEventListenerを実装しています。あなたが言っているのは、私が標準のScrollView、Edittextなどを使用することができないということですか?私は本当に自分自身を書く必要がありますか?サムスンのウィジェット(少なくともスクロールビュー)は標準的なアンドロイドのように見えます。キーボードを回転させる機会があると思いますか? – stoefln

+0

オリエンテーション(layout_portraitとレイアウトland)の両方を実装する必要があります。その後、オリエンテーションが0になると、ポートレートを設定する必要があります。回転が(270 + -20)に変わると、ビューを削除して風景を膨張させて添付する必要があります。 –

+0

とキーボードは? – stoefln

0

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

チェックこの:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

あなたがした後、唯一LANDSCAPEに画面をロックしているこのプロパティを設定することにより How to handle screen orientation change when progress dialog and background thread active? (第2、私は考えて答える)

+0

それを取得しないでください。 「あなたのデバイスを回転させて行動の振る舞いを上書きしなければなりません」という意味はどうですか? – stoefln

+0

あなたがマニフェストでconfigChanges:orientaionを処理すると言った場合は、onConfigurationChanged(Configuration)などを上書きすることができます。このメソッドでは、手動で必要なビューのみを回転させることができます – dilix

+0

はい、 edittextsまたはキーボードがプログラムで機能しません。あなたはそれをする方法を知っていますか? – stoefln

2

http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges

そして、これをこれは、ユーザーがポートレートモードでデバイスを保持していても、ポートレートモードには回転しません。あなたは自分の問題を理解している限り、一つのことをすることができます。

android:configChanges="orientation" 

上記のプロパティをアクティビティに追加します。 ActivityクラスでonConfigurationChangeメソッドをオーバーライドすると、アクティビティをランドスケープにロックするのではなく、必要に応じてオリエンテーションの変更を処理できます。

あなたの問題が正しい方法で理解できれば、それはあなたを助けるかもしれません。

+0

私はそれができることを知っています。しかし、すでに書いたように、私はまだ回転している編集テキストフォーム(またはボタン)をレンダリングすることはできず、キーボードは常にランドスケープモードで表示されます。 – stoefln

0

あなたは、ダイアログとして別のアクティビティを使用し、menifestでそのプロパティ(オリエンテーションとテーマ)を設定して使用することをお勧めします。あなたのマニフェストファイルで

+0

は動作しません - 試しただけです:どのようにデバイスを回転させていてもダイアログアクティビティは横に表示されます – stoefln

0

はよりthis

<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 &のためにあなたのカメラのプレビュー活動 android:configChanges="keyboardHidden|orientation"に以下の特性を与える懸念画面に(あなたの必要性のような)ニードフルを行いますこのような方向モード(たとえば、風景またはポートレート)。

@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... 

    } 
} 

これはあなたの問題を取り除くのに役立ちます。

+0

クールはトーストメッセージを回転させることができないことを知りませんでした。しかし、私はまだフォーム要素を回転させる方法がわからない – stoefln

+0

画面の向きが変わるとアンドロイドがこれを処理します。画面の向きが変わるたびに 'onConfigurationChanged'が呼び出されます。私はsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)を呼び出しているので、 –

+0

いいえ、それは回転の世話をしません。 カメラのプレビューをランドスケープにロックするには - アンドロイドはアクティビティ全体をロックします。 – stoefln

0

afaik:回転は、方向イベント をキャッチし、その向きに従って新しいレイアウトで画面を膨張させることによって達成されます。風景の中に

  1. 膨らま
  2. 回転が
  3. あなたは私たちが代わりに風景の肖像画ボタンの新しいレイアウトでのボタンのホルダービューを膨らま例えば すなわちを変更したい画面の一部を膨らま発生します。

実行時に一緒に追加する部分にレイアウトをカットする必要があります。

これを達成するための別の方法は、向きの変更を使用しているインスタンスのカメラのプレビューのための表面のビューを使用し、表面を保持し、framelayout

+0

私は、アプリを再膨張させたくありません。 45°モードで撮影された画像を考えてみましょう。ユーザーが携帯電話を風景と肖像画の間で回転させるたびに、インターフェイス全体を再構築したくはありません。 – stoefln

関連する問題