无法在android中正确显示摄像头视图?

无法在android中正确显示摄像头视图?,android,camera,rotation,Android,Camera,Rotation,在我的android应用程序中,我使用相机并以编程方式启动。我在三星gt-s5360上运行我的代码,但视图按反时钟方向旋转了90度。我的代码在HTC wildfire-s上运行良好。在该设备上,摄像头视图在未旋转视图的情况下正确显示。但它并没有在每个设备上显示正确的视图。因此,我如何编写适用于所有设备(android)的代码我的android jar是2.2,API级别是8。请帮助我。这是我的代码 public class AndroidCamera extends Activity imple

在我的android应用程序中,我使用相机并以编程方式启动。我在三星gt-s5360上运行我的代码,但视图按反时钟方向旋转了90度。我的代码在HTC wildfire-s上运行良好。在该设备上,摄像头视图在未旋转视图的情况下正确显示。但它并没有在每个设备上显示正确的视图。因此,我如何编写适用于所有设备(android)的代码我的android jar是2.2,API级别是8。请帮助我。这是我的代码

public class AndroidCamera extends Activity implements SurfaceHolder.Callback{
    int rotate=90;
    Camera camera;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    boolean previewing = false;
    LayoutInflater controlInflater = null;
    public static ArrayList<Activity> activities=new ArrayList<Activity>();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        activities.add(this);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        surfaceView = (SurfaceView)findViewById(R.id.camerapreview);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);


        Intent i=new Intent();
        i.setClassName("a.b.c","a.b.c.DialPad");
        startActivity(i);

    }


    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub
        //this.camera.setDisplayOrientation(90);
        if(previewing){
            camera.stopPreview();
            previewing = false;
        }

        if (camera != null){
            try {
                camera.setPreviewDisplay(surfaceHolder);
                camera.startPreview();
                //camera.setDisplayOrientation(90);
                previewing = true;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        camera = Camera.open();
        camera.setDisplayOrientation(rotate);
        //Parameters p= camera.getParameters();
        //p.setRotation(90);
        /*if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
        {   
            p.set("orientation", "portrait");
            p.set("rotation",90);
            Toast.makeText(getApplicationContext(), "Potrait Mode", Toast.LENGTH_SHORT).show();
        }
        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
        {                               
            p.set("orientation", "landscape");          
            p.set("rotation", 90);
            Toast.makeText(getApplicationContext(), "Landscape Mode", Toast.LENGTH_SHORT).show();
        }*/




    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        camera.stopPreview();
        camera.release();
        camera = null;
        previewing = false;

    }
公共类AndroidCamera扩展活动实现SurfaceHolder.Callback{
int=90;
摄像机;
表面视图表面视图;
浮雕浮雕;
布尔预览=假;
LayoutFlater控件充气器=空;
公共静态ArrayList活动=新建ArrayList();
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
活动。添加(本);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Picture);
getWindow().setFormat(像素格式.半透明);
surfaceView=(surfaceView)findViewById(R.id.camerapreview);
surfaceHolder=surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(surfaceHolder.SURFACE\u TYPE\u PUSH\u缓冲区);
意图i=新意图();
i、 setClassName(“a.b.c”、“a.b.c.DialPad”);
星触觉(i);
}
公共无效表面更改(表面文件夹持有者,整型格式,整型宽度,
整数高度){
//TODO自动生成的方法存根
//此.camera.setDisplayOrientation(90);
如果(预览){
camera.stopPreview();
预览=假;
}
如果(照相机!=null){
试一试{
摄像头。设置预览显示(surfaceHolder);
camera.startPreview();
//摄像头。设置显示方向(90);
预览=正确;
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
已创建的公共空白表面(表面持有人){
//TODO自动生成的方法存根
camera=camera.open();
摄像头。设置显示方向(旋转);
//参数p=camera.getParameters();
//p、 设置旋转(90);
/*if(getResources().getConfiguration().orientation==Configuration.orientation\u纵向)
{   
p、 设置(“方向”、“肖像”);
p、 设置(“旋转”,90);
Toast.makeText(getApplicationContext(),“Potrait模式”,Toast.LENGTH\u SHORT.show();
}
if(getResources().getConfiguration().orientation==Configuration.orientation\u)
{                               
p、 设置(“方向”、“景观”);
p、 设置(“旋转”,90);
Toast.makeText(getApplicationContext(),“横向模式”,Toast.LENGTH\u SHORT.show();
}*/
}
公共空间表面覆盖(表面覆盖物持有人){
//TODO自动生成的方法存根
camera.stopPreview();
相机。释放();
摄像机=零;
预览=假;
}

这有帮助吗?我尝试过该代码,但没有为我提供帮助。请帮助似乎有些设备不支持setDisplayOrientation。我在Galaxy Y上也面临同样的问题。你发现了什么吗?我想知道setDisplayOrientation是否成功,如果没有成功,则将其锁定到横向。这有帮助吗?我尝试过code但对我来说不是分叉。请帮助。似乎有些设备不支持setDisplayOrientation。我在Galaxy Y上也面临同样的问题。你发现了什么吗?我想知道setDisplayOrientation是否成功,如果不成功,将其锁定到横向。