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

推測では、キーリスナーを設定したものにはキーイベントが配信されていません。これは、間にリスナーがあり、キーイベントの伝播を停止する(つまり、このメソッドからtrueを返す)別のビューがある場合に発生する可能性があります。デフォルトでこれを行うビューがいくつかあります(たとえば、ほとんどのキーのEditText)。質問を編集してコードを追加したり、アクティビティの設定方法を説明したりできると便利です。

「キャンバスをクリックする」ことで、おそらくフォーカスを変更し、キーイベントを別のビューに配信することになります。これは、クリックした後にキーリスナーが突然機能しているのを見る理由を説明している可能性があります。

于 2011-08-02T20:22:43.477 に答える
0

onKeyDownをonメソッドの1つとして扱っているようです。

return super.onKeyDown(keyCode, msg);

この関数を呼び出して、押されたキーを返したい場合と同じように、これは悪いことです。単にfalseを返すように変更します。これは、キーボードが実行していることを処理していることを意味します。

編集

onKeyではなくonKeyDownを使用する理由はありますか?これが私が使用するいくつかの追加のコードです。ブール値の配列(長さ128のpressedKeys)を使用し、後でそれを使用して配列をチェックし、キーが押されているかどうかを確認できます。

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 に答える