android - setOnClickListener; - PullRequest
3 голосов
/ 26 мая 2011

Я возился с примером кода Snake , и я пытаюсь модифицировать его ради обучения, и надеюсь, я стал лучше понимать, как работает Android.

Пока что ядобавили две кнопки + соответствующий код 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" в текущем коде.Мой Xperia X10i не поставляется с DPAD, это его часть; -P

Я был бы очень признателен за некоторые указатели в правильном направлении.Как вы уже догадались, я довольно новичок в этом ..

Заранее спасибо, ребята

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

Вместо // perform action в ваших onClick методах скопируйте соответствующее тело из существующего кода (например, if (mDirection != EAST) mNextDirection = WEST;).

Кроме того, указание кнопки считается плохой практикойразмеры в пикселях.Это плохо работает для кода, предназначенного для запуска на устройствах, которые могут иметь очень разные плотности пикселей и размеры экрана.Гораздо лучше позволить самим кнопкам изменять размер в зависимости от того, что они содержат.

2 голосов
/ 26 мая 2011

Проверьте здесь:

Программирование и симуляция нажатия клавиш

Основная логика скрыта за:

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();
    }
}
0 голосов
/ 26 мая 2011

Вам необходимо создать функцию в 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);
...