我正在尝试创建一个自定义视图GhostSurfaceCameraView,该视图扩展了SurfaceView。这是我的类定义文件
GhostSurfaceCameraView.java:
公共类GhostSurfaceCameraView扩展了SurfaceView实现了SurfaceHolder.Callback{
表面粗糙度;
麦克默拉照相机;
GhostSurfaceCameraView(上下文){
超级(上下文);
//安装SurfaceHolder.Callback,以便在
//创建和破坏下垫面。
mHolder=getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE\u TYPE\u PUSH\u缓冲区);
}
已创建的公共空白表面(表面持有人){
//曲面已创建,获取摄影机并告诉其绘制位置。
mCamera=Camera.open();
试一试{
mCamera.setPreviewDisplay(支架);
}捕获(IOException异常){
mCamera.release();
mCamera=null;
//TODO:在此处添加更多异常处理逻辑
}
}
公共空间表面覆盖(表面覆盖物持有人){
//当我们返回时,曲面将被破坏,因此请停止预览。
//因为CameraDevice对象不是共享资源,所以它非常有用
//当活动暂停时释放它很重要。
mCamera.stopPreview();
mCamera.release();
mCamera=null;
}
公共无效表面更改(表面持有人,整数格式,整数w,整数h){
//现在已经知道大小,请设置相机参数并开始
//预览。
Camera.Parameters=mCamera.getParameters();
参数设置预览大小(w,h);
参数设置(“方向”、“纵向”);
//parameters.setRotation(90);//API 5+
mCamera.setParameters(参数);
mCamera.startPreview();
}
}
这在我的ghostviewscreen.xml中:
<;com.alpenglow.androcap.GhostSurfaceCameraView android:id=“@+id/ghostview_cameraview”
android:layout\u width=“fill\u parent”
android:layout\u height=“fill\u parent”/>;
现在在我的活动中:
创建时受保护的void(Bundle savedInstanceState){
试一试{
super.onCreate(savedInstanceState);
setContentView(R.layout.ghostviewscreen);
}
}
调用setContentView()时,会引发异常:
二进制XML文件09-17 22:47:01.958:错误/错误(337):
代码错误:
android.view.InflateException:二进制
XML文件行#14:错误膨胀
班
com.alpenglow.androcap.GhostSurfaceCameraView
有人能告诉我为什么我会犯这个错误吗?谢谢
我想我知道为什么这不起作用了。我只为一个参数“context”的情况提供了构造函数,而我本应该为两个参数“context,AttributeSet”的情况提供构造函数。我还需要为构造函数提供公共访问权限。以下是我的解决方案:
公共类GhostSurfaceCameraView扩展了SurfaceView实现了SurfaceHolder.Callback{
表面粗糙度;
麦克默拉照相机;
公共鬼影浮出水面Meraview(上下文)
{
超级(上下文);
init();
}
公共GhostSurfaceCameraView(上下文、属性集属性)
{
超级(上下文,attrs);
init();
}
公共GhostSurfaceCameraView(上下文上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
init();
}