0

我有一个 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()
 {


 }

}

4

2 回答 2

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
}
于 2011-08-03T00:44:03.960 回答
0

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

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

于 2011-08-02T20:22:43.477 回答