安卓 - 在相机上显示网格线

8

我是Android应用程序开发的新手。我想创建一个应用程序,从摄像头获取流并在SurfaceView或FrameLayout上显示。

我需要一个选项在流上方显示“显示网格线”,当用户单击它时,网格线将显示在相机流上。

有人可以帮我解决如何在相机流上显示网格线吗?

任何帮助都将不胜感激...

谢谢。 Mohsin

2个回答

14
如果您想根据屏幕大小动态绘制线条,则应在相机预览类中使用以下代码。
    @Override  
    protected void onDraw(Canvas canvas)  
    { 
        if(grid){
        //  Find Screen size first  
        DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();  
        int screenWidth = metrics.widthPixels;  
        int screenHeight = (int) (metrics.heightPixels*0.9);  

        //  Set paint options  
        paint.setAntiAlias(true);  
        paint.setStrokeWidth(3);  
        paint.setStyle(Paint.Style.STROKE);  
        paint.setColor(Color.argb(255, 255, 255, 255));  

        canvas.drawLine((screenWidth/3)*2,0,(screenWidth/3)*2,screenHeight,paint);
        canvas.drawLine((screenWidth/3),0,(screenWidth/3),screenHeight,paint);
        canvas.drawLine(0,(screenHeight/3)*2,screenWidth,(screenHeight/3)*2,paint);
        canvas.drawLine(0,(screenHeight/3),screenWidth,(screenHeight/3),paint);
        }
    } 

你还需要在相机预览类的构造函数中添加以下行:

this.setWillNotDraw(false);

对于这种情况,您可以在构造函数中设置绘制选项并节省一些资源。绘制选项是恒定的,并且onDraw()方法将被多次调用。 - Oximer

3
如果您想在相机预览上叠加层,您需要编写自己的相机。这是一个很难用一篇答案涵盖的话题,但是这里有一个指南可以让您开始:http://developer.android.com/guide/topics/media/camera.html#custom-camera。一旦您拥有工作中的相机,只需编辑相机活动的XML布局即可。使用RelativeLayout,它将允许您将其他视图(按钮、图片)放置在预览表面上。以下是与上述指南兼容的XML布局示例。预览表面是以编程方式创建并放置在FrameLayout中(更多信息请参见上面链接的指南)。ImageView将在预览表面上绘制。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

  <FrameLayout
    android:id="@+id/camera_preview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

  <ImageView
    android:id="@+id/grid"
    android:src="@drawable/your_grid_drawable"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

</RelativeLayout>

您还需要放置一个捕获按钮和网格切换按钮,但是您应该可以从上面的示例中了解如何做到这一点。只需在RelativeView中添加更多元素,并将它们定位为普通布局中的位置即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接