0

我正在尝试使用类扩展surfaceview和实现来显示相机视图surfaceholder.callback。在我的主要活动ViewActivity中,如下所示,我从 中实例化一个对象SurfaceHolderActivity并将其设置为使用setContentView(myCameraSurfaceHolder);. 在设备上运行应用程序时,它会崩溃并且 logcat 给出错误 sayin no empty constructor。请帮我找出错误。

查看活动:

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));
}

日志猫:

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
4

4 回答 4

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)); }

于 2014-04-24T05:43:25.680 回答
0

你不能直接实例化一个活动!您永远不会使用构造函数构造活动,因此您不能使用构造函数传入参数。请访问http://developer.android.com/guide/components/activities.html#Creating了解如何创建 Activity。

于 2014-04-24T07:09:03.793 回答
0

我的错误是,在清单文件中,该类SurfaceView被放置为主要活动,而它不是一个活动,它只是一个类。ViewActivity我只是以我的主要活动的方式修改了清单文件。它工作正常。感谢所有提供帮助的人。

于 2014-04-24T20:28:43.437 回答
0

不要让你的 SurfaceView 扩展 Activity——你应该扩展 SurfaceView,而不是 Activity!

logcat 消息显示您正在尝试创建一个扩展 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。

于 2014-04-24T09:19:11.523 回答