如何在用作相机预览的SurfaceView上叠加自定义绘图?

时间:2016-07-20 14:04:25

标签: android android-camera android-camera2 android-vectordrawable android-overlay

我想要的是什么:

我想制作一个Camera活动(即一个显示相机预览的活动),其中有一个方形(它实际上有点复杂的形状,但为了简单起见我说方形 )被覆盖在相机预览上,以便用户知道相机的位置,使得特定方形的真实物体位于覆盖在相机预览上的方形内部。

就像下图中的相机预览中有一个脸部形状一样,这样用户就可以将脸放在那里。

enter image description here

我的解决方案:

我想过FrameLayout,然后让SurfaceView用于相机预览,并VectorDrawable用于覆盖形状,因为FrameLayout会对其进行Z顺序这些孩子VectorDrawable最终会叠加在SurfaceView上。

问题:

我需要我的应用与API 11及更高版本兼容。所以我必须使用VectorDrawableCompat。要使用VectorDrawableCompat,我们需要设置AAPT标志。的 - source

问题在于网络上的任何地方,设置此标志的方式都适用于Android Studio。 (如描述的方法here)将几行添加到项目的build.gradle文件中。

我无法找到如何在Eclipse中设置此标志。我一直在搜索,最后安装Eclipse Buildship插件以在Eclipse中使用Gradle。我跟着this guide。当我将Gradle特性添加到我的Android项目中时,我确实得到了一个build.gradle文件。我粘贴了代码以在其中启用AAPT标记但它根本没有帮助我解决问题。

现在我正在寻找一种替代方法来实现我的任务。请不要告诉我如何使用VectorDrawableCompat

1 个答案:

答案 0 :(得分:1)

我同意VectorDrawable优于png文件。 但我认为png是可以接受的,因为具有dp大小的ImageView会自动缩放图像。

这是一个例子:

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <SurfaceView
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:src="@drawable/face_shape"/>

</FrameLayout>