Android:onKeyDown直到鼠标点击后才会触发

时间:2011-08-02 19:24:53

标签: android onkeydown

我有一个onKeyDown事件,它应该在触发后显示一个图像,但是我注意到尽管多次按下相应的键,但是在我用鼠标点击画布上的任何地方之前,图像才会出现。有关实际问题的任何建议以及如何进行?这个概念很新,所以不太确定可能缺少什么。 *完整编辑和粘贴课程。 感谢

public class BuccaneerView extends TileView {

public static final int PLAYER = 1;
public static final int GREEN_STAR = 2;



Coordinate P_Location;

public BuccaneerView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initBucc();
}

private void initBucc() {

    this.setFocusable(true);



    Resources r = this.getContext().getResources();

    resetTiles(4);
    loadTile(PLAYER, r.getDrawable(R.drawable.aerialplayer));
    loadTile(GREEN_STAR, r.getDrawable(R.drawable.greenstar));

    /**/

    P_Location = new Coordinate(5,5);
    setTile(PLAYER, P_Location.x, P_Location.y);

}


 @Override
    public boolean onKeyDown(int keyCode, KeyEvent msg) {

     if (keyCode == KeyEvent.KEYCODE_SPACE) 
     {

         setTile(GREEN_STAR, 1, 0);         
     }


     return super.onKeyDown(keyCode, msg);
 }

 public void update()
 {


 }

}

2 个答案:

答案 0 :(得分:0)

猜测,关键事件没有传递给你设置关键监听器的任何东西。如果在其间存在另一个视图是监听器并且停止密钥事件的传播(即从该方法返回true),则会发生这种情况。默认情况下有一些视图可以执行此操作(例如,大多数键的EditText)。如果您可以编辑问题并包含更多代码或描述您的活动设置方式,将会很有帮助。

通过“点击画布”,您可能正在改变焦点,并将关键事件传递到不同的视图。这可以解释为什么你在点击后突然看到关键的监听器工作。

答案 1 :(得分:0)

您似乎将onKeyDown视为您的on方法之一。

return super.onKeyDown(keyCode, msg);

这是一件坏事,它就好像你已经调用了这个函数并希望返回已按下的键。将它改为简单地返回false,这意味着你正在处理键盘正在做的事情。

修改

你有没有理由使用onKeyDown而不是onKey?这是我使用的一些额外代码,它使用一个布尔数组(pressedKeys,长度为128),稍后你可以使用它检查数组以查看是否按下了一个键

public boolean onKey(View v, int keyCode, KeyEvent event) 
{
     if (event.getAction() == android.view.KeyEvent.ACTION_DOWN) 
     {
         if(keyCode > 0 && keyCode < 127)
             pressedKeys[keyCode] = true;
     }

    if (event.getAction() == android.view.KeyEvent.ACTION_UP) 
    {
        if(keyCode > 0 && keyCode < 127)
            pressedKeys[keyCode] = false;
    }

    keyEventsBuffer.add(keyEvent);
}
   return false;
}

因此,您可以说

If(pressedKeys[KeyYouWantToCheck])
{
//Do some stuff if that key is down
}