2015-01-06 3 views
0

Я расширяю класс от SimpleOnGestureListener, чтобы обнаружить все события onScroll, и он регистрирует все события onScroll, если я один раз коснусь экрана. Но когда я дважды нажимаю экран, а затем прокручиваю, событие onScroll будет заменено на onDoubleTapEvent, а onScroll не вызывается. Я попытался вернуть false в onDoubleTap и onDoubleTapEvent, но он не работает. Класс демонстрируется следующим образом.Android - SimpleOnGestureListener onDoubleTapEvent потребляет все событие onScroll

public class ScrollGestureListener extends SimpleOnGestureListener { 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
      float distanceY) { 
     System.out.println("onScroll"); 
     // Do something here 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     System.out.println("onLongPress"); 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     System.out.println("onSingleTapUp"); 
     return super.onSingleTapUp(e); 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     System.out.println("onFling"); 
     return super.onFling(e1, e2, velocityX, velocityY); 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 
     System.out.println("onShowPress"); 
     super.onShowPress(e); 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     System.out.println("onDown"); 
     return super.onDown(e); 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     System.out.println("onDoubleTap"); 
     return false; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent e) { 
     System.out.println("onDoubleTapEvent"); 
     return super.onDoubleTapEvent(e); 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     System.out.println("onSingleTapConfirmed"); 
     return super.onSingleTapConfirmed(e); 
    } 
} 

И выход Logcat, если я дважды касаюсь, а затем прокрутку, будет выглядеть следующим образом.

01-06 16:01:33.268: I/System.out(10693): onDown 
01-06 16:01:33.268: I/System.out(10693): onDown 
01-06 16:01:33.318: I/System.out(10693): onSingleTapUp 
01-06 16:01:33.459: I/System.out(10693): onDoubleTap 
01-06 16:01:33.459: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.459: I/System.out(10693): onDown 
01-06 16:01:33.459: I/System.out(10693): onDown 
01-06 16:01:33.519: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.529: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.569: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.599: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.619: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.629: I/System.out(10693): onShowPress 
01-06 16:01:33.629: I/System.out(10693): onShowPress 
01-06 16:01:33.649: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.679: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.699: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.719: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.739: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.749: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.769: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.779: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.809: I/System.out(10693): onDoubleTapEvent 
01-06 16:01:33.819: I/System.out(10693): onDoubleTapEvent 

Есть ли способ исправить это? Как отключить двойной кран? Заранее спасибо!

ответ

0

Я столкнулся с этой проблемой. Если вы посмотрите на документацию для SimpleOnGestureListener он говорит

«Это реализует все методы в GestureDetector.OnGestureListener и GestureDetector.OnDoubleTapListener»

Так попробуйте изменить код, чтобы просто использовать OnGestureListener как это, и вы должны получить только OnScroll события, когда вы перетаскиваете, даже если вы дважды коснитесь.

import android.view.GestureDetector.OnGestureListener; 
import android.view.MotionEvent; 

public class ScrollGestureListener implements OnGestureListener { 

    public ScrollGestureListener() { 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     System.out.println("onScroll"); 
     // Do something here 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

}