OnTouchListener не работает внутри Activity

#android #touch-event #ontouchlistener

#Android #сенсорное событие #ontouchlistener

Вопрос:

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

{ частный FartPianoView fpv;

 @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    fpv = new FartPianoView(this);
    setContentView(fpv);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    // TODO Auto-generated method stub
    float currentX = event.getX();
    float currentY = event.getY();
    switch(event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
            finish();

            break;
        case MotionEvent.ACTION_UP:
            finish();
            break;
    }
    return false;
}
  

}

Ответ №1:

Вам необходимо переопределить

 public boolean onTouchEvent (MotionEvent e)
  

метод Activity класса, а не метод, который вы переопределяете ( onTouch(...) из OnTouchListener ). Тогда это должно сработать. Пример:

 @Override
public boolean onTouchEvent(MotionEvent e) {

    // do your stuff...

    return false;
}
  

Это означает, что вы распознаете события касания на Activity , а не на View . Если вы хотите явно обнаруживать касания на View via OnTouchListener , вам необходимо установить OnTouchListener для вашего View .

В вашем случае:

 fpv = new FartPianoView(this);
fpv.setOnTouchListener(this);
  

Комментарии:

1. Как насчет вашего FartPianoView? Перехватывает ли он сенсорные жесты?

2. Другой вопрос, по какой-то причине, когда я использую методы из fpv, это не работает. Есть идеи, почему?