2012-08-01 574 views
5

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

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

任何人都可以帮助我,我怎样才能显示相机流网格线?

任何帮助将是可观的...

谢谢。 Mohsin

回答

11

如果你想根据你的屏幕大小dinsetsly画线,你可以使用它添加到你的相机预览课。

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

对于这种情况,您在构造函数中设置您的油漆的选择和节省一些资源。油漆选项是常量,onDraw()方法将被调用很多次。 – Oximer 2016-02-11 16:53:00

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中添加更多元素并将它们放在普通布局中即可。