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