框架布局的Android相机预览问题

框架布局的Android相机预览问题,android,layout,camera,preview,Android,Layout,Camera,Preview,这是我的XML文件。我拍摄了一个线性布局,其中我拍摄了表面视图和按钮,但相机显示的视图如下图所示。。。看图片,请给我解决方案 <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical"> <SurfaceView android:layout_heig

这是我的XML文件。我拍摄了一个线性布局,其中我拍摄了表面视图和按钮,但相机显示的视图如下图所示。。。看图片,请给我解决方案

 <LinearLayout 
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">
    <SurfaceView 
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/surface"
        android:layout_weight="2"/>
     <Button 
        android:layout_height="100dp"
        android:layout_width="match_parent"
        android:id="@+id/click"
        android:text="Click Photo"
        android:layout_weight="1"/>
</LinearLayout>  
}


尝试按照文档中建议的方式,使用以获得相机方向并随之更新。
请看下面的示例:。

添加 公共类YourActivity扩展AppCompatActivity实现SurfaceHolder.Callback{ ....
}这是更改相机方向的正确方法,这段代码对我很有用。camera.setDisplayOrientation(90)

你不知道这是什么所有的移动摄像头都是景观旋转()方法可以死记硬背你的图像这是一个答案我有一个关于它的答案我正在制作一个像你一样的应用程序,只要加上那句话,你的代码就行了(对不起,我是墨西哥人)请解释你的代码,而不是简单地说“加上这个,它就行了”这是一个浮出水面的工具。是的,这是要做的事,需要纠正
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    clickphotobtn=(Button)findViewById(R.id.click);
    surfaceview=(SurfaceView)findViewById(R.id.surface);
    surfaceholder=surfaceview.getHolder();
    surfaceholder.addCallback(this);
    surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    clickphotobtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            //startActivity(intent);
            camera.takePicture(null, null, null);

        }
    });
@Override
public void surfaceCreated(SurfaceHolder holder) {
     try {
         camera = Camera.open();  
         camera.setPreviewDisplay(surfaceholder);
     // Toast.makeText(getApplication(), "Create", Toast.LENGTH_LONG).show();
     } catch (IOException e) { }
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) 
{
     Camera.Parameters parameters = camera.getParameters();
     Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

     if(display.getRotation()== Surface.ROTATION_0)
     {
         parameters.setPreviewSize(width, height);
         camera.setDisplayOrientation(90);
     }
     if(display.getRotation()== Surface.ROTATION_90 || display.getRotation()== Surface.ROTATION_180)
         parameters.setPreviewSize(width, height);
     if(display.getRotation()==Surface.ROTATION_270)
     {
         parameters.setPreviewSize(width, height);
         camera.setDisplayOrientation(180);
     }
    //   camera.setParameters(parameters);
     try{
         camera.setPreviewDisplay(surfaceholder);
         camera.startPreview();          
     }
     catch (Exception e){
         Toast.makeText(getApplication(), e.toString(), Toast.LENGTH_LONG).show();
     }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    if (null == camera)
        return;
    camera.stopPreview();
    camera.release();
    camera = null;
    preview = false;
    //Toast.makeText(getApplication(), "Destroy", Toast.LENGTH_LONG).show();
}