Android - 在相机上显示网格线

时间:2012-08-01 17:34:49

标签: android camera grid lines glsurfaceview

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

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

有人可以帮我说明如何在相机流媒体上显示网格线???

任何帮助都会很明显......

谢谢。 穆赫辛

2 个答案:

答案 0 :(得分:12)

如果您想根据屏幕尺寸动态绘制线条,则应在相机预览类中使用以下代码。

    @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);

答案 1 :(得分: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中添加更多元素,就像在普通布局中一样定位它们。