ポートレート モードでは画像が垂直方向に引き伸ばされて表示され、ランドスケープ モードでは水平方向に引き伸ばされて表示されます。
画像をキャプチャした後、適切なサイズで表示されますが。
この問題を解決するにはどうすればよいですか?
ポートレート モードでは画像が垂直方向に引き伸ばされて表示され、ランドスケープ モードでは水平方向に引き伸ばされて表示されます。
画像をキャプチャした後、適切なサイズで表示されますが。
この問題を解決するにはどうすればよいですか?
表示サイズに合ったプレビュー サイズを選択する必要があります。プレビュー サイズの設定を変更することをお勧めしますSurfaceView。プレビュー データは問題ありませんが、歪んでいません。縦横比の異なる面にぶつけると歪んで見えます。
全画面表示の場合、カメラのプレビュー サイズがそのサイズに一致することがわかるはずです。少なくとも、同じ縦横比のカメラが存在するはずです。たとえば、画面が 640x480 の場合、320x240 のプレビュー サイズはフルスクリーンで引き伸ばされて表示されませんSurfaceView。
(1) 利用可能なプレビュー サイズ (2) ビューに基づいて、プレビュー サイズを制限する必要があります。それでも必要な場合の私の解決策は次のとおりです。
private class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mHolder;
    private Camera mCamera;
    public CameraPreview(Context context, Camera camera) {
        super(context);
        mCamera = camera;
        // Install a SurfaceHolder.Callback so we get notified when the
        // underlying surface is created and destroyed.
        mHolder = getHolder();
        mHolder.addCallback(this);
        // deprecated setting, but required on Android versions prior to 3.0
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }
    private void startPreview() {
        try {
        /**
         * Orientation should be adjusted, see http://stackoverflow.com/questions/20064793/how-to-fix-camera-orientation/26979987#26979987
         */
            Camera.Parameters parameters = mCamera.getParameters();
            List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
            Camera.Size previewSize = null;
            float closestRatio = Float.MAX_VALUE;
            int targetPreviewWidth = isLandscape() ? getWidth() : getHeight();
            int targetPreviewHeight = isLandscape() ? getHeight() : getWidth();
            float targetRatio = targetPreviewWidth / (float) targetPreviewHeight;
            Log.v(TAG, "target size: " + targetPreviewWidth + " / " + targetPreviewHeight + " ratio:" + targetRatio);
            for (Camera.Size candidateSize : previewSizes) {
                float whRatio = candidateSize.width / (float) candidateSize.height;
                if (previewSize == null || Math.abs(targetRatio - whRatio) < Math.abs(targetRatio - closestRatio)) {
                    closestRatio = whRatio;
                    previewSize = candidateSize;
                }
            }
            Log.v(TAG, "preview size: " + previewSize.width + " / " + previewSize.height);
            parameters.setPreviewSize(previewSize.width, previewSize.height);
            mCamera.setParameters(parameters);
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();
        } catch (IOException e) {
            Log.d(TAG, "Error setting camera preview: " + e.getMessage());
        }
    }
 }
    camera.startPreview() を呼び出す前にこれを追加して、これを修正しました。
Camera.Parameters parameters = camera.getParameters(); 
parameters.setPreviewSize(yourSurfaceView.getWidth(), yourSurfaceView.getHeight());
camera.setParameters(parameters);
それは誰かを助けるかもしれません。
解決策は簡単です!アクションバーの下でサーフェスビューを使用する場合、これが問題になる可能性があります。この行を使用して修正できますが、アクションバーを使用してテストしていません。
これを使って:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    プレビューについて話している場合は、SurfaceView のサイズをカメラのプレビュー サイズと同じに設定してみてください。そうすれば、プレビューは拡大縮小されません。