Если вы не укажете ориентацию экрана в файле AndroidManifest.xml, ориентацией дисплея по умолчанию будет альбомная позиция, и каждый раз, когда вы поворачиваете телефон, андроид будет изменять полученное изображение, чтобы изображение выровнялось с телефоном. Таким образом, у вас есть два варианта:
1,1. Укажите ориентацию экрана в файле AndroidManifest.xml и установите правильную ориентацию экрана:
AndroidManifest.xml:
<activity
android:label="@string/app_name"
android:name=".CameraPreview"
android:screenOrientation="portrait" >
CameraPreview.java:
mCamera.setPreviewDisplay(holder);
mCamera.setDisplayOrientation(90);
или
AndroidManifest.xml:
<activity
android:label="@string/app_name"
android:name=".CameraPreview"
android:screenOrientation="landscape" >
CameraPreview.java:
mCamera.setPreviewDisplay(holder);
mCamera.setDisplayOrientation(0);
1.2. Не указывайте ориентацию экрана в файле AndroidManifest.xml и устанавливайте правильную ориентацию экрана при каждом повороте экрана:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
int rotation = ((Activity)mCtx).getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 90; break;
case Surface.ROTATION_90: degrees = 0; break;
case Surface.ROTATION_180: degrees = 270; break;
case Surface.ROTATION_270: degrees = 180; break;
}
mCamera.setDisplayOrientation(degrees);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
Но поскольку кажется, что вы уже разработали макет портрета с помощью кнопок и т. Д., Я думаю, что лучшим вариантом будет первый.
Надеюсь, это поможет и наилучшими пожеланиями.