安卓 - 相机预览

16

我正在尝试相机预览。

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

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>
1个回答

48

您过早调用了最后三行代码。在调用setPreviewDisplay()之前,您必须等待表面准备好,并且在调用startPreview()之前,您必须等待表面被调整大小 (surfaceChanged())。 这个项目有你需要的内容。


那很好。另外一个问题。在Android 2.3和3.0上,当我们旋转设备时,预览似乎会倾斜。您是否也有解决方案? - Nilesh Pawar
1
@NileshPawar:在这种情况下,“偏斜”的意思我不太清楚。顺便说一下,我的当前相机工作是在这里:https://github.com/commonsguy/cwac-camera - CommonsWare
哇,你的新代码中的Camera-demov9解决了这个问题!我会获取我所做的不同之处的差异,并在此发布以造福大家。遗憾的是,谷歌文档在这些领域很模糊。 - Nilesh Pawar
getBestPreviewSize函数并不完全正确。例如,对于以下配置,该函数返回640x480作为最佳预览大小,导致预览被扭曲。它应该给出最接近的好值为864 x 480。下面是可用预览尺寸、我的设备显示尺寸和getBestPreviewSize()函数的返回值的日志。 - Nilesh Pawar

可用的预览尺寸如下: 预览宽度:1280 高度:720 预览宽度:864 高度:480 预览宽度:640 高度:480 预览宽度:480 高度:320 预览宽度:352 高度:288 预览宽度:320 高度:240 预览宽度:176 高度:144

显示尺寸:宽度:854 高度:480 获取最佳预览尺寸:854 高度:480 最佳预览尺寸 = 宽度:640 高度:480
- Nilesh Pawar
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接