Один DoubleTapDetector для нескольких элементов управления пользовательского интерфейса - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь определить UI-элемент управления, который запустил MotionEvent в Android. У меня есть один doubleTapDetector

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 
    doubleTapDetector = new GestureDetector(this, new DoubleTapDetector());
}

объявлено как

private class DoubleTapDetector extends GestureDetector.SimpleOnGestureListener {     
    @Override
     public boolean onDoubleTap(MotionEvent e) {
        String uiControlName = obtainUiControlName(e);
        // Do something depends on uiControlName
        return true;
    }        

    private String obtainUiControlName(MotionEvent e) {
        int deviceId = e.getDeviceId();
        switch (deviceId) {
            case R.id.button1: return "Button1"; 
            case R.id.button2: return "Button2";  
        } 
        return null;
    }         
} 

размещено на обеих кнопках

Button button1 = (Button) findViewById(R.id.button1);
    outcomeButton.setOnTouchListener(new OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            doubleTapDetector.onTouchEvent(event);
            return true;
        }
    });        

Button button2 = (Button) findViewById(R.id.button2);
    outcomeButton.setOnTouchListener(new OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            doubleTapDetector.onTouchEvent(event);
            return true;
        }
    });

Проблема в том, что deviceId всегда равен 0 , и я не могу определить, какая кнопка вызывает событие двойного щелчка. Есть ли способ сделать это без реализации двух разных doubleTapDetector для каждой кнопки?

1 Ответ

0 голосов
/ 30 сентября 2011

Ошибка.getDeviceId возвращает идентификатор физического указателя устройства, откуда было получено касание.Не идентификатор виджета.

Мне кажется, что единственный способ сделать это - создать уникальный DoubleTapDetector для каждой вашей кнопки, а также сохранить какой-то идентификатор кнопки в вашем классе DoubleTapDetector.Потому что метод onDoubleTap не дает достаточно информации о виджете, по которому произошло нажатие.

Как это:

private class DoubleTapDetector extends GestureDetector.SimpleOnGestureListener { 
   int id;
   DoubleTapDetector(int id){
      this.id = id;
   }
...
...