2012-06-04 3 views
0

Я создаю свое первое приложение для Android, используя this guide в качестве ссылки. В настоящее время у меня есть красная кнопка на моем холсте, и когда пользователь нажимает кнопку, логическая (зеленая) будет установлена ​​в true, чтобы растровое изображение кнопки было зеленым.Проблема с Android onTouchEvent()

Эта часть приложения работает, однако она работает независимо от того, где пользователь нажимает на холст. Я хочу, чтобы логическое значение было изменено, когда пользователь нажимает на растровое изображение кнопки. Вот то, что я в настоящее время в моем коде:

Метод onTouchEvent()

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 

     button.handleActionDown((int)event.getX(), (int)event.getY()); 

     if (button.isTouched()) { 
      green = true; 
     } 
    } if (event.getAction() == MotionEvent.ACTION_MOVE) { 

    } if (event.getAction() == MotionEvent.ACTION_UP) { 
     if (button.isTouched()) { 
      green = false; 
      button.setTouched(false); 
     } 
    } 
    return true; 
} 

handleActionDown() Метод

public void handleActionDown(int eventX, int eventY) { 
    if (eventX >= (x - bitmap.getWidth()/2) && (eventX <= (x + bitmap.getWidth()/2))) { 
     if (eventY >= (y - bitmap.getHeight()/2) && (eventY <= (y + bitmap.getHeight()/2))) { 
      setTouched(true); 

     } else { 
      setTouched(false); 
     } 
    } else { 
     setTouched(false); 
    } 
} 

Может кто-нибудь увидеть, что мне не хватает в для события ACTION_DOWN сделать так, чтобы он срабатывал только при касании растрового изображения растрового изображения?

С уважением

+0

Когда код ведет себя таким образом, вопреки что вы ожидаете, хорошим первым приложением может быть создание отладочного вывода - добавьте некоторые записи в свой handleActionDown(), в частности eventX vs x и событие Y vs y. Или даже отобразите эти цифры на экране. Вы можете найти что-то простое, например, x и y не инициализироваться. Или, может быть, у вашего растрового изображения нет размеров, которые, по вашему мнению, он делает, или ... –

+0

Кажется, если все, что вы пытаетесь сделать, это создать кнопку со статусом «вниз» и состояние вверх, чтобы вы могли сделать это просто в пределах xml-файл. – trumpetlicks

+0

Вы действительно пытаетесь создать собственное пользовательское распознавание кнопок? Потому что кажется, что ваш onTouchEvent реализуется на вашем верхнем уровне. – trumpetlicks

ответ

0

Избегайте использования onTouchEvent с кнопками, то лучше использовать OnClick, поскольку операционная система определяет, является ли или не специальная кнопка нажата вместо того, чтобы вы того, чтобы вычислить положение кнопки

Во-первых, установить onClickListener

btn.setOnClickListener(this); 

Это предполагает, что текущий класс реализует View.OnClickListener, так что если вы не реализуете его вам либо придется использовать другой класс или создать анонимный внутренний класс.

Затем в методе onClick, убедитесь, что ID спички и добавить любые действия, которые вы хотите сделать в операторе if-(или альтернативно переключатель заявление)

@Override 
public void onClick(View v) { 

    if(v.getId() == R.id.btn1){ 
     //do whatever you want on press 
    } 
} 
Смежные вопросы