【发布时间】: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