2010-03-16 139 views
14

我正在尝试相机预览Android - 相机预览

这是我的代码,它不会抛出任何错误,但屏幕仍然是黑色的。有任何想法吗?

this.setContentView(R.layout.camerapreview);  
SurfaceView cameraSurface = (SurfaceView)findViewById(R.id.cpPreview); 
SurfaceHolder holder = cameraSurface.getHolder(); 
holder.addCallback(this); 
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
this.camera = Camera.open(); 
this.camera.setPreviewDisplay(holder); 
this.camera.startPreview(); 

camerapreview.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <SurfaceView 
     android:id="@+id/cpPreview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center"> 

    </SurfaceView> 
</LinearLayout> 

回答

46

你太早调用最后三行。在致电setPreviewDisplay()之前,您必须等待表面准备好,并且在致电startPreview()之前必须等待表面的大小(surfaceChanged())。 This project有你所需要的。

+0

这很好。附加问题。在Android 2.3和3.0上,当我们旋转设备时,预览似乎有偏斜。你是否也有这个解决方案呢? – 2013-11-05 18:53:40

+1

@NileshPawar:在这种情况下,我不知道你的意思是“歪斜”。 FWIW,我目前的相机工作在:https://github.com/commonsguy/cwac-camera – CommonsWare 2013-11-05 19:01:46

+0

哦哇。来自新代码的Camera-demov9解决了问题!我将获得我所做的不同的差异,并将其发布在这里,为大家的利益。在这些领域中,Google文档晦涩难懂。 – 2013-11-05 19:40:31