我正在构建一个应用程序,我需要从自定义相机拍摄照片并且视图被反转或旋转(当我上下移动时,图片会向侧面移动)。
知道为什么会这样,以及如何解决这个问题?
这是相机的代码:
class Preview extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = "Preview";
SurfaceHolder mHolder;
public Camera camera;
Preview(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new PreviewCallback() {
// Called for each frame previewed
public void onPreviewFrame(byte[] data, Camera camera) {
Log.d(TAG, "onPreviewFrame called at: " + System.currentTimeMillis());
Preview.this.invalidate();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
camera.startPreview();
调用预览的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.solve_capture);
preview = new Preview(this); // <3>
((FrameLayout) findViewById(R.id.preview)).addView(preview); // <4>
buttonClick = (Button) findViewById(R.id.buttonCapture);
buttonClick.setOnClickListener(new OnClickListener() {
public void onClick(View v) { // <5>
preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
});
buttonFocus = (Button) findViewById(R.id.buttonFocus);
buttonFocus.setOnClickListener(new OnClickListener() {
public void onClick(View v) { // <5>
preview.camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
Camera.Parameters camParam = camera.getParameters();
camParam.setFocusMode(Parameters.FOCUS_MODE_AUTO);
camera.setParameters(camParam);
}
});
}
});
Log.d(TAG, "onCreate'd");
}
答案 0 :(得分:0)
好的,我发现了一种适合我的方式: 我已经(在清单中)将使用预览(即我提供的代码的第二部分)的方向设置为“横向”,并更改了布局以适应横向模式。 现在相机看起来很好。但这意味着相机活动将始终处于风景中(这对我来说已经足够了)。