Android:OnKeyListener相机按钮?

时间:2012-01-07 22:22:44

标签: android

我目前正在制作Android游戏,我希望能够使用相机按钮进行拍摄(或者我不介意使用不同的硬件按钮,只需点击屏幕就会变成垃圾)。

在我看来,我有:

public class GameFrame extends SurfaceView implements SurfaceHolder.Callback, OnKeyListener{
    public GameFrame(Context context){
        ...
        setOnKeyListener(this);
        ...
    }

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(event.getAction() == KeyEvent.ACTION_DOWN)
        {
            shoot();
            return true;
        }
        return false;
    }
}

然而,这并没有做任何事情,即使我疯狂地击中手机上的所有按键,也从未调用过shoot()! 是否有一些我错过的东西,或者我完全错了?

干杯

3 个答案:

答案 0 :(得分:2)

您的代码是正确的,并且侦听器已正确连接到SurfaceView。这里的问题有点误解:

OnKeyListener附加到View时,仅当特定视图聚焦时,侦听器 才会收到关键事件。如果活动中存在多个视图,则必须区分关键侦听器。很可能你的观点并不专注于创业。

您可以将视图集中在我强烈建议的代码中,因为如果您有其他视图,用户可能会意外清除焦点。以下是一个小代码片段,您的代码必须如何更改,仅供参考/理解:

public class GameFrame extends SurfaceView implements SurfaceHolder.Callback, OnKeyListener{
    public GameFrame(Context context){
        ...
        setOnKeyListener(this);

        setFocusable(true);
        setFocusableInTouchMode(true);
        requestFocus();
        ...
    }

    ....
}

更好的替代方式的方式是获取您的活动中的所有关键事件,而不管哪个视图是关注的。这可以通过覆盖活动onKeyDown()方法来完成。在您的活动中添加以下内容:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(event.getAction() == KeyEvent.ACTION_DOWN)
    {
        shoot();
        return true;
    }
    return false;
}

答案 1 :(得分:1)

例如,你有一个名为btn的按钮布局。您可以通过执行以下操作在onCreate方法中声明此按钮:

//This 'called' your layout, you could access elements of your layout
setContentView('R.layouts.name_layout');
// You call the button you're interested in
Button btn = this.findViewById(R.your_button_in_layout);
btn.setOnClickListener(this);

使用onClick方法更容易理解,但OnKeyListener方法也是如此。 看看:http://www.androiddevelopment.org/category/code-examples/

答案 2 :(得分:0)

像杰瑞米说的那样,你的听众是否被使用? (我之所以这么说,是因为你应该通过该代码的按键获得响应)。如果您想使用相机按钮,请使用keycode。祝你好运!