0

我是 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 和叠加图像实现相机的最佳方法是什么?

提前致谢

4

1 回答 1

1

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

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

于 2012-05-31T21:10:30.880 回答