要将Camera的位置设置为与表面垂直,您可以使用Camera.Parameters类中的setRotation方法来设置相机的方向。以下是一个示例代码,演示如何将相机位置设置为与表面垂直:
import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.io.IOException;
public class MainActivity extends Activity implements SurfaceHolder.Callback {
private Camera camera;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(surfaceHolder);
setCameraRotation();
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
// 如果预览变化或旋转,确保停止预览
if (surfaceHolder.getSurface() == null) {
return;
}
try {
camera.stopPreview();
} catch (Exception e) {
e.printStackTrace();
}
// 在这里重置相机参数,例如,设置预览大小、对焦模式等
// ...
// 重新启动预览
try {
camera.setPreviewDisplay(surfaceHolder);
setCameraRotation();
camera.startPreview();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
// 释放相机资源
camera.stopPreview();
camera.release();
camera = null;
}
private void setCameraRotation() {
Camera.Parameters parameters = camera.getParameters();
int cameraOrientation = 90; // 设置相机方向,垂直为90度
if (getApplicationContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
camera.setDisplayOrientation(cameraOrientation);
parameters.setRotation(cameraOrientation);
} else if (getApplicationContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
camera.setDisplayOrientation(0);
parameters.setRotation(0);
}
camera.setParameters(parameters);
}
}
这个示例代码创建了一个SurfaceView来预览相机图像,然后在surfaceCreated方法中打开相机,并通过setCameraRotation方法设置相机的方向。在surfaceChanged方法中,您可以根据需要重新设置相机参数,并在重新启动预览之前调用setCameraRotation方法来确保相机方向正确。在surfaceDestroyed方法中,释放并释放相机资源。