SurfaceView上的Android中心CameraPreview

时间:2013-11-01 21:36:45

标签: android android-camera surfaceview

我正在研究Android的脸部检测应用程序(我的设备是带有Android 4.1.2的Nexus S)。我的SurfaceView大小自动设置为800x480,但我的最大相机分辨率为720x480。我试图在其onLayout()方法中更改SurfaceView的大小,但是我在预览中缺少80px。是否可以拉伸或至少使CameraPreview居中?

由于

2 个答案:

答案 0 :(得分:2)

可以使用Camera.Parameters更改CameraPreview大小。 但我建议将surfaceview放在屏幕的中心。 这是代码。 我没有执行代码,但它可能有效。

// Center the child SurfaceView within the parent.
final int width = r - l;
final int height = b - t;
if (width * previewHeight > height * previewWidth) {
    final int surfaceViewWidth = previewWidth * height / previewHeight;
    surfaceView.layout((int)((width - surfaceViewWidth)*0.5), 0, (int)((width + surfaceViewWidth)*0.5), height);
} else {
    final int surfaceViewHeight = previewHeight * width / previewWidth;
    surfaceView.layout(0, (int)((height - surfaceViewHeight)*0.5), width, (int)((height + surfaceViewHeight)*0.5));
}

答案 1 :(得分:0)

如果还有其他人遇到此问题-使相机预览居中的方法是使用FrameLayout:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/surfacecontainer">
    <android.view.SurfaceView
        android:id="@+id/cameraPreview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"/>
</FrameLayout>

More details can be found here