我是android应用程序开发的新手。我想创建一个从相机获取流并在 SurfaceView 或 FrameLayout 上显示的应用程序。
我需要在流媒体“显示网格线”上显示一个选项,当用户单击它时,网格线将显示在相机流上。
任何人都可以帮助我如何在相机流媒体上显示网格线???
任何帮助将是可观的...
谢谢你。莫辛
我是android应用程序开发的新手。我想创建一个从相机获取流并在 SurfaceView 或 FrameLayout 上显示的应用程序。
我需要在流媒体“显示网格线”上显示一个选项,当用户单击它时,网格线将显示在相机流上。
任何人都可以帮助我如何在相机流媒体上显示网格线???
任何帮助将是可观的...
谢谢你。莫辛
如果要根据屏幕尺寸动态绘制线条,则应在相机预览类中使用以下代码。
@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);
如果您想在相机预览上叠加,您必须编写自己的相机。这是一个很难涵盖的主题,但这里有一个指南可以帮助您入门:
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 并像在普通布局中一样定位它们。