我正在创建一个扩展surfaceview的自定义小部件,并计划将其用于相机预览。
在主活动中,我尝试实现一些事件侦听器,但无法捕获任何事件。
这是我试图添加事件侦听器的代码部分:

videoPreview = (CaptureView)findViewById(R.id.capturePreview);

    videoPreview.setOnKeyListener(new OnKeyListener(){
        public boolean onKey(View v, int keyCode, KeyEvent event){
            switch(keyCode)
            {
            case KeyEvent.KEYCODE_CAMERA:
                videoPreview.TakePicture();
                return true;
            }
            return false;
        }
    });

如果我按下一个按钮,logcat就会输出“continuous to wait key to be dispatched”行。
有人知道如何使用surfaceview类在主活动中实现事件侦听器吗?
谢谢!

最佳答案

我不确定这是否是你想要的答案,但也许值得一试。
特定视图的OnKeyListener只有在该视图具有焦点时按下该键时才会调用。您可以尝试确保它的重点是:

videoPreview.requestFocus();

或者将OnKeyListener放在包含所有其他内容(包括LinearLayout)的布局上(例如CaptureView)。类似于:
LinearLayout ll = (LinearLayout) findViewById(R.id.VideoContainer);
ll.setOnClickListener(new OnKeyListener(){
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // ...
    }
);

09-25 18:02