使用camera2 android在预览中绘制自动对焦矩形

时间:2016-11-05 18:10:03

标签: android preview autofocus camera2 drawrectangle

我正在使用Android的Camera2 api。我能够捕获图像并保存它。我正在使用autofocus模式来聚焦和捕捉图像。

captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);

其中captureBuilder是

private CaptureRequest.Builder captureBuilder;

我想在相机预览中的自动对焦区域中显示一个矩形或圆形,就像在默认相机应用程序中一样。对于像预览中间的矩形这样的实例。

enter image description here

我见过this,但我不想在预览的任何地方触摸任何内容。

我搜索了很多例子,但大多数都说明了使用已弃用的Camera类,对Camera2 api没什么用处。如何通过新的相机api实现这种聚焦矩形?

1 个答案:

答案 0 :(得分:1)

看起来你只想在预览的中心有一个静态矩形。

您可以通过将图像添加到布局中来通过xml布局执行此操作。

以Camera2Basic示例(https://github.com/googlesamples/android-Camera2Basic)并将其添加到此示例中,下面的示例在侧面添加矩形,一些文本和控制按钮(用于横向):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.android.camera2basic.AutoFitTextureView
        android:id="@+id/texture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true" />

    <LinearLayout
        android:id="@+id/control"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        android:background="@color/colorPrimary"
        android:orientation="vertical">

        <Space
            android:layout_width="1dp"
            android:layout_height="0dp"
            android:layout_weight="1" >
        </Space>

        <TextView
            android:id="@+id/label1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/label1_text" />

        <Space
            android:layout_width="1dp"
            android:layout_height="0dp"
            android:layout_weight="1" >
        </Space>

        <Button
            android:id="@+id/picture_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/picture_button_text" />

        <Space
            android:layout_width="1dp"
            android:layout_height="0dp"
            android:layout_weight="1" >
        </Space>

        <ImageButton
            android:id="@+id/info"
            style="@android:style/Widget.Material.Light.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|bottom"
            android:contentDescription="@string/description_info"
            android:padding="20dp"
            android:src="@drawable/ic_action_info" />

        <Space
            android:layout_width="1dp"
            android:layout_height="0dp"
            android:layout_weight="1" >
        </Space>

    </LinearLayout>

    <RelativeLayout
        android:id="@+id/tileview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_toLeftOf="@+id/control"
        android:background="@android:color/transparent" >

        <ImageView
            android:id="@+id/autofocus_rectangle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/autofocus_landscape_Image"
            android:layout_centerInParent="true" />

        <TextView
            android:id="@+id/bottom_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_alignParentBottom="true"
            android:layout_margin="10sp"
            android:background="@android:color/holo_blue_dark"
            android:textSize="15sp"
            android:padding="5sp"
            android:text="" />

    </RelativeLayout>

</RelativeLayout>