我正在尝试创建一个GhostSurfaceCameraView扩展的自定义视图SurfaceView。这是我的班级定义文件
GhostSurfaceCameraView
SurfaceView
GhostSurfaceCameraView.java:
GhostSurfaceCameraView.java
public class GhostSurfaceCameraView extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; GhostSurfaceCameraView(Context context) { super(context); // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { // The Surface has been created, acquire the camera and tell it where to draw. mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (IOException exception) { mCamera.release(); mCamera = null; // TODO: add more exception handling logic here } } public void surfaceDestroyed(SurfaceHolder holder) { // Surface will be destroyed when we return, so stop the preview. // Because the CameraDevice object is not a shared resource, it's very // important to release it when the activity is paused. mCamera.stopPreview(); mCamera.release(); mCamera = null; } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Now that the size is known, set up the camera parameters and begin // the preview. Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(w, h); parameters.set("orientation", "portrait"); // parameters.setRotation(90); // API 5+ mCamera.setParameters(parameters); mCamera.startPreview(); } }
这是在我的ghostviewscreen.xml中:
<com.alpenglow.androcap.GhostSurfaceCameraView android:id="@+id/ghostview_cameraview" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
现在,我在活动中进行了:
protected void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); setContentView(R.layout.ghostviewscreen); } }
当setContentView()被调用时,抛出一个异常:
setContentView()
Binary XML file 09-17 22:47:01.958: ERROR/ERROR(337): ERROR IN CODE: android.view.InflateException: Binary XML file line #14: Error inflating class com.alpenglow.androcap.GhostSurfaceCameraView
谁能告诉我为什么会出现此错误?谢谢。
我想我弄清楚了为什么这没用。当我应该为两个参数“ Context,AttributeSet”的情况提供构造函数时,我只为一个参数“ context”的情况提供了构造函数。我还需要使构造函数具有公共访问权限。这是我的解决方法:
public class GhostSurfaceCameraView extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; public GhostSurfaceCameraView(Context context) { super(context); init(); } public GhostSurfaceCameraView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public GhostSurfaceCameraView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); }