我正在尝试使用类扩展surfaceview
显示摄像机视图并实现surfaceholder.callback
。在我的主要活动ViewActivity
中,如下所示,我从SurfaceHolderActivity
实例化一个对象,并使用setContentView(myCameraSurfaceHolder);
将其设置为一个视图。在设备上运行应用程序时,它会崩溃并且logcat会在no empty constructor
中显示错误。请帮我找错。
ViewActivity:
private SurfaceHolderActivity myCameraSurfaceHolder;
private android.hardware.Camera myCamera;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE );
requestWindowFeature( Window.FEATURE_NO_TITLE );
getWindow().setFormat(PixelFormat.TRANSPARENT);
getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN );
myCameraSurfaceHolder = new SurfaceHolderActivity(this);
setContentView(myCameraSurfaceHolder);
}
SurfaceHolderActivity:
public SurfaceHolderActivity(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.mySurfaceHorder = this.getHolder();
this.mySurfaceHorder.addCallback(this);
//this.mySurfaceHorder.setType(mySurfaceHorder.SURFACE_TYPE_PUSH_BUFFERS);
//this.mySurfaceHorder.setFormat(mySurfaceHorder.setFormat(PixelFormat.TRANSLUCENT));
}
logcat的:
04-24 04:34:07.406: E/AndroidRuntime(21420): FATAL EXCEPTION: main
04-24 04:34:07.406: E/AndroidRuntime(21420): java.lang.RuntimeException: Unable to
instantiate activity omponentInfo{com.example.augrealtest00/com.example.augrealtest00.SurfaceHolderActivity}:
java.lang.InstantiationException: can't instantiate class
com.example.augrealtest00.SurfaceHolderActivity; no empty constructor
答案 0 :(得分:0)
您是否在 SurfaceHolderActivity 中尝试了此操作:
public SurfaceHolderActivity(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.mySurfaceHorder = this.getHolder();
this.mySurfaceHorder.addCallback(
上下文
);
//this.mySurfaceHorder.setType(mySurfaceHorder.SURFACE_TYPE_PUSH_BUFFERS);
//this.mySurfaceHorder.setFormat(mySurfaceHorder.setFormat(PixelFormat.TRANSLUCENT));
}
答案 1 :(得分:0)
您无法直接实例化活动!您永远不会使用构造函数构造活动,因此您无法使用构造函数传递参数。请访问http://developer.android.com/guide/components/activities.html#Creating以了解如何创建活动。
答案 2 :(得分:0)
不要让SurfaceView扩展Activity - 你应该扩展SurfaceView,而不是Activity!
logcat消息显示您正在尝试创建一个类extends Activity,但您没有提供默认构造函数(没有参数的构造函数)。所以Android框架无法创建您的活动!。
您应该修改SurfaceholderActivity类并扩展SurfaceView而不是Activity。如果您在活动标记中添加了SurfaceHolderAcitivty,则可能会修改AndroidManifest.xml。
尝试修改您的代码:
public class SurfaceHolderActivity extends SurfaceView implements Callback {
private SurfaceHolder mySerfaceHolder;
public SurfaceHolderActivity(Context context) {
super(context);
this.mySerfaceHolder = this.getHolder();
this.mySerfaceHolder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO some implementation...
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO some implementation...
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO some implementation...
}
}
我建议你将SurfaceHolderActivity重命名为MySurfaceView,因为它应该是View而不是Activity。
答案 3 :(得分:0)
我的错误是,在清单文件中,类SurfaceView
被放置为主要活动,而它不是活动,它只是一个类。我刚刚以ViewActivity
是我的主要活动的方式修改了清单文件。它工作正常。感谢所有提供帮助的人。