Android:DoubleTap在更改方向后无法正常工作

时间:2016-02-12 10:04:29

标签: android listener gesture ontouchlistener gesturedetector

我在onCreate()方法中附加了一个touchlistener和gesturelistener。

当我在纵向模式下双击标题栏时,一切正常。但是当我将屏幕旋转到横向模式时,双击不再被检测到。然而,听众仍在被召唤。当我将屏幕旋转回纵向模式时,双击再次工作。

我的听众:

 //Add double click gesture listener to Title Bar.
        final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
            public boolean onDoubleTap(MotionEvent e) {
                myMethod();
                return true;
            }
        });
        TextView tv = (TextView) findViewById(R.id.tv_title);
        tv.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        });

1 个答案:

答案 0 :(得分:2)

意识到长按总是被调用,它给了我更多的空间来找到现有的问题/答案。

我发现了question.但是,答案与我的情况无关,如果我已正确实施OnTouchListener,它确实存在问题。

转到android docs我注意到我应该返回true,而不是手势结果。 (OnLongClick返回void!),无论如何都可能强制它消耗掉该结果。

Android文档指定OnTouchListener的实现,如下所示:

View myView = findViewById(R.id.my_view); 
myView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        // ... Respond to touch events       
        return true;
    }
});

将我的代码更改为以下内容解决了问题

  //Add double click gesture listener to Title Bar.
  final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
       public boolean onDoubleTap(MotionEvent e) {
           myMethod();
           return true;
       }
   });
   TextView tv = (TextView) findViewById(R.id.tv_title);
   tv.setOnTouchListener(new OnTouchListener() {
       public boolean onTouch(View v, MotionEvent event) {
           gestureDetector.onTouchEvent(event);
           return true; // ADDED THIS
       } 
  });

为什么它以纵向工作,但不是风景,但我不知道。