【问题标题】:Android - Drawing on SurfaceView not appearingAndroid - 在 SurfaceView 上绘图未出现
【发布时间】:2014-12-30 12:40:43
【问题描述】:

我只是想在我的 Android 应用上的相机预览上画一个正方形。相机预览显示在 SurfaceView 上,从我的在线阅读看来,实现这一点的最佳方法是将另一个 SurfaceView 放置在相机馈送显示的那个之上并在其上绘制。所以我添加了这个并添加了一些代码,但它不起作用,我看到相机输入没有问题,但正方形永远不会被绘制。只是想知道是否有人对我错过的有任何想法。我的 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);
}

【问题讨论】:

  • 如果您不清楚@SweetWishershi 的含义,请参阅例如developer.android.com/reference/android/view/… 。此外,如果您希望在表面上绘制的东西是透明的,您可能需要设置 porter-duff xfer 模式并使用具有非透明 alpha 的颜色。
  • @SweetWisherヅ 您能否将您的评论添加为答案,我会将其标记为正确。你是绝对正确的,当我在 onCreate 中添加以下行时,一切正常。非常感谢!! transparentView.setZOrderOnTop(true);

标签: android android-canvas surfaceview


【解决方案1】:

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

尝试为您的视图设置setZOrderOnTop:

transparentView.setZOrderOnTop(true);

希望对你有所帮助ツ

【讨论】:

  • 我不能在我的情况下使用它,因为如果游戏结束,有一个视图“Game Over View”需要越过表面视图
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2012-10-06
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多