2011-08-02 74 views
0

我有一个onKeyDown事件应该显示一次触发图像,但我注意到,尽管多次按下相应的键,图像不会出现,直到我点击任何地方与我的鼠标在画布上。关于实际问题以及如何进行的任何建议?这个概念很新,所以不太清楚可能会丢失什么。 *整个编辑和粘贴课程。 感谢Android: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() 
{ 


} 

}

+1

请向我们展示你的onKeyDown监听器的代码。 –

+0

从我的理解你在模拟器上测试?对? –

+0

向我们展示teh codez! – Blundell

回答

0

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

return super.onKeyDown(keyCode, msg); 

是一个坏事情,它作为如果你调用此函数,并希望返回已按下哪个键。将其改为仅仅是返回false,这意味着你正在处理键盘正在做的事情。

编辑

是否有您使用onKeyDown和未安其任何理由?下面是我使用一些额外的代码,它使用布尔数组(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 
} 
+0

返回false而不是建议;直到我用鼠标点击画布,绿色的星星才会出现。 –

+0

看到我的编辑希望这有助于 – Chris

+0

我必须在什么地方放置onKeyListener?从onKeyDown变为onKey,没有成功。 –

0

在猜测,关键事件没有被传递到您所设置的键侦听器上。如果在另一个视图之间是一个监听器并停止键事件的传播(即从此方法返回true),则会发生这种情况。有些视图默认是这样做的(例如EditText对于大多数键)。如果您可以编辑您的问题并添加更多代码或描述您的活动设置方式,这将会很有帮助。

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

相关问题