2011-08-02 29 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對於大多數鍵)。如果您可以編輯您的問題並添加更多代碼或描述您的活動設置方式,這將會很有幫助。

通過'點擊畫布',您可能正在改變焦點並使關鍵事件被傳遞到不同的視圖。這可以解釋爲什麼你點擊後突然看到關鍵聽衆正在工作。