3

私はSnakeのサンプルコードをいじり回しており、トレーニングのためにこれを変更しようとしています。できれば、Androidの動作についての理解を深めることができます。

これまでに、以下のように2つのボタンと対応するsetOnClickListenerコードを追加しました。

snake_layout.xml

          <Button
         android:layout_height="39px"
         android:layout_width="55px" 
         android:layout_marginLeft="15px"
         android:text="Left"
         android:id="@+id/left_button" />

      <Button
         android:layout_height="39px" 
         android:layout_width="55px" 
         android:layout_marginLeft="240px"
         android:text="Right"
         android:id="@+id/right_button" />

およびSnake.java

.
.
.
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // No Title bar
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.snake_layout);

    final Button leftButton = (Button) findViewById(R.id.left_button);
    leftButton.setOnClickListener(new Button.OnClickListener() {  
        public void onClick(View v)
            {
                //perform action
            }
         });

    final Button rightButton = (Button) findViewById(R.id.right_button);
    rightButton.setOnClickListener(new Button.OnClickListener() {  
        public void onClick(View v)
            {
                //perform action
            }
         });
.
.
.

両方のボタンは、「 finish() 」などの単純なメソッドを試してみると、本来あるべき場所に表示され、機能します。

さて、私がやりたいのは、SnakeView.javaで、これらのボタンが以下のコードをトリガーするようにすることです。

        if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
        if (mDirection != EAST) {
            mNextDirection = WEST;
        }
        return (true);
    }

    if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
        if (mDirection != WEST) {
            mNextDirection = EAST;
        }
        return (true);
    }

明確にするために、現在のコードの「KEYCODE_DPAD_RIGHT」および「KEYCODE_DPAD_LEFT」と同じジョブを実行するカスタムの画面上のボタンを用意する必要があります。私のXperiaX10iにはDPADが付属していません。それはその一部です;-P

私は本当に正しい方向へのいくつかの指針をいただければ幸いです。ご想像のとおり、私はこれにかなり慣れていません。

よろしくお願いします

4

3 に答える 3

2

ここをチェックしてください:

キーストロークをプログラムでスロー/シミュレーションする

基本的なロジックは背後に隠されています:

private void doInjectKeyEvent(KeyEvent kEvent) {
    try {
        /* Inject the KeyEvent to the Window-Manager. */
        windowManager.injectKeyEvent(kEvent.isDown(), kEvent.getKeyCode(),
            kEvent.getRepeatCount(), kEvent.getDownTime(),
            kEvent.getEventTime(), true);
    } catch (DeadObjectException e) {
        e.printStackTrace();
    }
}
于 2011-05-26T14:11:28.093 に答える
2

// perform actionメソッド内の の代わりにonClick、既存のコードから適切な本文をコピーします (例: if (mDirection != EAST) mNextDirection = WEST;)。

余談ですが、ボタンのサイズをピクセル単位で指定するのは適切ではないと考えられています。これは、ピクセル密度と画面サイズが大きく異なる可能性があるデバイスで実行することを目的としたコードではうまく機能しません。ボタンに含まれるものに基づいてボタンのサイズを変更する方がはるかに優れています。

于 2011-05-26T14:13:42.647 に答える
0

SnakeView.javaに、mNextDirectionを変更できる関数を作成する必要があります。

public void setMNextDirection(int direction){
  //check if the direction is recognised
  if (direction == EAST || direction == WEST ) { 
    mNextDirection = direction;
  }

その後、次を使用できます。

mSnakeView.setMNextDirection(mSnakeView.WEST);
于 2011-05-26T14:17:32.083 に答える