3

アプリにカメラを実装しようとしていますが、向きのプレビューは常に横向きですが、アプリは縦向きなので、縦向きモードにする必要があります。

mCamera.setDisplayOrientation(90); 

Galaxy tab2とhtcでうまく機能しますが、sony xperia solaでテストすると、奇妙な表示が表示されます。画像画面を追加します。

ここに画像の説明を入力してください

uは、カメラのプレビューが画面の右側にのみ表示されていることを確認できます

しかし、私がこのアプリから写真を撮ると、それは大丈夫と表示されます。私は何が問題なのかわからないので、誰かがこれで私を助けることができます。

4

2 に答える 2

1

表面のサイズ(および位置)を強制することができます-私はこのパスに従って、SamsungGalaxySの2.2バージョンの同様のバグを補正しました。このバグはデバイスが2.3にアップグレードされたときに修正されました。

于 2012-11-17T17:56:21.567 に答える
0

私は次のコードを使用してこれを解決しました:

class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {

    [...]

    public void show(){
        // Install a SurfaceHolder.Callback so we get notified when the
        // underlying surface is created and destroyed.
        if (!showing) {
            showing=true;
            try {
                mCamera = Camera.open();
                aspectRatio();

                try {
                    mCamera.setPreviewDisplay(mHolder);
                    mCamera.startPreview();
                    mCamera.setDisplayOrientation(90);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(getContext(), R.string.text_camera_open_error, Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void aspectRatio(){
        if (!aspect_radio_corrected){
            aspect_radio_corrected=true;
            Display default_disp=((Activity)getContext()).getWindowManager().getDefaultDisplay();

            Camera.Parameters parameters = mCamera.getParameters();
            Camera.Size optimalPreviewSize=parameters.getPreviewSize();

            FrameLayout.LayoutParams l_params=(FrameLayout.LayoutParams)getLayoutParams();
            float ratio = (float) optimalPreviewSize.height / optimalPreviewSize.width;
            l_params.width=default_disp.getWidth();
            l_params.height=Math.round(l_params.width / ratio);
            setLayoutParams(l_params);
            requestLayout();
        }
    }

    [...]
}

そして、私が持っているレイアウトファイルには:

<com.socialcoaster.utils.CameraPreview
    android:id="@+id/cameraView"
    android:background="@android:color/transparent"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

これは、カメラの現在のプレビューサイズ設定とそれを表示するsurfaceView領域のアスペクト比に関連するバグのようです。aspectRatio()の値を。のようないくつかの固定値に変更するだけで、それを確認できます100

于 2014-11-24T18:18:46.907 に答える