Android相机视图倒置

时间:2011-09-05 17:12:13

标签: android camera

我正在构建一个应用程序,我需要从自定义相机拍摄照片并且视图被反转或旋转(当我上下移动时,图片会向侧面移动)。

知道为什么会这样,以及如何解决这个问题?

这是相机的代码:

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");
  }

1 个答案:

答案 0 :(得分:0)

好的,我发现了一种适合我的方式: 我已经(在清单中)将使用预览(即我提供的代码的第二部分)的方向设置为“横向”,并更改了布局以适应横向模式。 现在相机看起来很好。但这意味着相机活动将始终处于风景中(这对我来说已经足够了)。