0

我正在尝试识别在 Android 中触发 MotionEvent 的 UI 控件。我有一个 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 的情况下做到这一点?

4

1 回答 1

0

错误。getDeviceId 返回接收到触摸的物理指针设备 ID。不是小部件 ID。

我觉得这样做的唯一方法是为每个按钮创建唯一的 DoubleTapDetector,并将某种按钮的 ID 存储在 DoubleTapDetector 类中。因为 onDoubleTap 方法没有提供关于 Widget 发生点击的足够信息。

像这样:

private class DoubleTapDetector extends GestureDetector.SimpleOnGestureListener { 
   int id;
   DoubleTapDetector(int id){
      this.id = id;
   }
...
于 2011-09-30T04:52:35.117 回答