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