将相机和其他相机的Surface View用于叠加图像

时间:2012-05-31 21:03:49

标签: android android-layout

我是android编程的新手.. 我有一个问题。

我想制作一个应用程序,在相机的顶部真实视图上绘制叠加层。 我使用表面视图来保存来自相机的图像。

这里是我的主要活动的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
        <SurfaceView
            android:id="@+id/preview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
        />
        <com.openit.razer.overlayPreview
            android:id="@+id/overlayprev"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
        <com.openit.razer.overlayImage
            android:id="@+id/overlayimg"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
</RelativeLayout>

这是我的主要活动类: P

ublic void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ar);

        overPrev = (overlayPreview)findViewById(R.id.overlayprev);
        overImg = (overlayImage)findViewById(R.id.overlayimg);

        overImg.setZOrderOnTop(true);
        overImg.getHolder().setFormat(PixelFormat.TRANSPARENT);


        preview=(SurfaceView)findViewById(R.id.preview);
        previewHolder=preview.getHolder();
        previewHolder.addCallback(surfaceCallback);
        previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() {
        public void surfaceCreated(SurfaceHolder holder) {
          try {
            camera.setPreviewDisplay(previewHolder);
          }
          catch (Throwable t) {
            Log.e("PreviewDemo-surfaceCallback",
                  "Exception in setPreviewDisplay()", t);
            Toast
              .makeText(ARrazerNav.this, t.getMessage(), Toast.LENGTH_LONG)
              .show();
          }
        }

        public void surfaceChanged(SurfaceHolder holder,
                                   int format, int width,
                                   int height) {

          Camera.Parameters parameters=camera.getParameters();
          //Camera.Size size=getBestPreviewSize(width, height,
                                             // parameters);
          List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
          Camera.Size selected = sizes.get(0);
          parameters.setPreviewSize(selected.width, selected.height);
          camera.setParameters(parameters);
          if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
              camera.setDisplayOrientation(90);
          }
          else{
              camera.setDisplayOrientation(0);
          }
          //camera.setDisplayOrientation(90);
          //camera.setDisplayOrientation(0);
          camera.startPreview();
        }

        public void surfaceDestroyed(SurfaceHolder holder) {
          // no-op
        }
      };

但是我得错了

FATAL EXCEPTION:main
...
...
...
caused by: android.view.InflateException: Binary XML file line #10: Error inflating class blablabla
你帮我解决了我的问题。这是一个陷入这个问题的3天。

什么是使用SurfaceView实现Camera的最佳方法,并在其上面叠加图像?

提前致谢

1 个答案:

答案 0 :(得分:1)

您应该使用FrameLayout将视图放在其他视图之上。首先是SurfaceView,然后是你想要的视图。

我实际上是自己做的,将图像放在相机预览上。我使用了一个带有SurfaceView和ImageView的FrameLayout。工作得很好。