2012-01-07 36 views
2

我目前正在製作一款適用於Android的遊戲,我希望能夠使用相機按鈕進行拍攝(或者我不介意的其他硬件按鈕,只需點擊屏幕就可以實現垃圾)。Android:OnKeyListener相機按鈕?

在我看來,我有:

public class GameFrame extends SurfaceView implements SurfaceHolder.Callback, OnKeyListener{ 
    public GameFrame(Context context){ 
     ... 
     setOnKeyListener(this); 
     ... 
    } 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(event.getAction() == KeyEvent.ACTION_DOWN) 
     { 
      shoot(); 
      return true; 
     } 
     return false; 
    } 
} 

然而,這並不做任何事情,拍攝()不會被調用,甚至當我瘋狂地打我手機上的所有按鍵! 有沒有明顯的我錯過了,或者我完全錯了嗎?

乾杯

+0

也許是因爲你的聽衆應用到什麼都沒有? – 2012-01-07 22:28:09

+0

它不附於我的觀點嗎?我認爲這就是setOnKeyListener(this)所做的... – 2012-01-07 22:32:19

+0

keyListener必須附加到視圖。 setOnKeyListener(this) - >這表示您的偵聽器在您的活動中實現,而不是專用的偵聽器。你必須附加你的聽衆的東西,按鈕,文本輸入,等等。 – 2012-01-07 22:34:32

回答

2

你的代碼是正確的,並且監聽器正確地連接到你的SurfaceView。這裏的問題是有點小誤會:

如果您將OnKeyListenerView,聽者只有當特定視圖集中發出的按鍵事件。在活動中存在多個視圖的情況下,這是區分關鍵聽衆的必要手段。很可能你的觀點並非專注於啓動。

您可以將視圖集中在代碼中,我建議您不要使用,因爲如果您還有其他視圖,用戶可能會意外清除焦點。這裏是一個小片段如何你的代碼已經被改變,僅供參考/諒解:

public class GameFrame extends SurfaceView implements SurfaceHolder.Callback, OnKeyListener{ 
    public GameFrame(Context context){ 
     ... 
     setOnKeyListener(this); 

     setFocusable(true); 
     setFocusableInTouchMode(true); 
     requestFocus(); 
     ... 
    } 

    .... 
} 

方式更好的選擇是讓你活動的所有重要事件,其獨立的視圖集中。這可以通過重寫活動onKeyDown()方法來完成。添加類似這樣的活動到你的活動:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(event.getAction() == KeyEvent.ACTION_DOWN) 
    { 
     shoot(); 
     return true; 
    } 
    return false; 
} 
0

就像Jeremy說的,你的聽衆是否被使用? (我這樣說是因爲你應該通過使用該代碼的按鍵得到響應)。如果您想使用相機按鈕,請使用keycode。祝你好運!

1

例如,您有一個名爲btn的按鈕的佈局。您可以通過做聲明在onCreate方法按鈕:

//This 'called' your layout, you could access elements of your layout 
setContentView('R.layouts.name_layout'); 
// You call the button you're interested in 
Button btn = this.findViewById(R.your_button_in_layout); 
btn.setOnClickListener(this); 

更容易用的onClick方法理解,但它與OnKeyListener方法同樣的事情。 看看那個:http://www.androiddevelopment.org/category/code-examples/