我只是想在我的Android应用程序上的相机预览上画一个正方形。相机预览显示在SurfaceView上,从我在线阅读看来,实现此目的的最佳方法是将另一个SurfaceView放置在相机Feed显示的那个上并在其上绘制。所以我添加了这个并且还添加了一些代码,但它没有工作,我看到相机提供没有问题,但方块永远不会被绘制。只是想知道是否有人对我错过的东西有任何想法。我的DrawFocusRect函数被调用,它只是我的矩形永远不会出现。
我的布局xml文件中的表面视图
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:orientation="vertical" >
<SurfaceView
android:id="@+id/full_colour"
android:layout_width="fill_parent"
android:layout_height="match_parent" />
<SurfaceView
android:layout_alignParentTop="true"
android:id="@+id/TransparentView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
我的绘图代码,来自onPreviewFrame
private static void DrawFocusRect()
{
int hWidth = transparentView.getWidth();
int hHeight = transparentView.getHeight();
float f = (float) 0.5;
float rLeft = (float) Math.floor(((1-f)/2)*hWidth);
float rRight = (float) Math.floor((((1-f)/2)+f)*hWidth);
float rTop = (float) Math.floor(((1-f)/2)*hHeight);
float rBottom = (float) Math.floor((((1-f)/2)+f)*hHeight);
canvas = holderTranspaernt.lockCanvas();
canvas.drawColor(Color.GREEN, Mode.CLEAR);
//border's properties
paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.YELLOW);
paint.setStrokeWidth(3);
canvas.drawRect(rLeft, rTop, rRight, rBottom, paint);
holderTranspaernt.unlockCanvasAndPost(canvas);
}
答案 0 :(得分:6)
您需要设置 zOrder 才能处理在SurfaceView上绘制的视图的排序。
尝试为您的观点设置setZOrderOnTop:
transparentView.setZOrderOnTop(true);
希望它有助于ツ