Android - 在SurfaceView上绘图不出现

时间:2014-12-30 12:40:44

标签: android android-canvas surfaceview

  

我只是想在我的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);
}

1 个答案:

答案 0 :(得分:6)

  

您需要设置 zOrder 才能处理在SurfaceView上绘制的视图的排序。

尝试为您的观点设置setZOrderOnTop

transparentView.setZOrderOnTop(true);

希望它有助于ツ