GestureDetector conflit onFling vs onSingleTapUp

时间:2016-05-24 14:12:52

标签: android android-gesture

我有一个带有GridView的Android应用程序。

在该网格中我需要检测很多事件,我必须使用GestureDetector,但有时当我点击网格项时会触发事件onFling而不是onSingleTapUp

我做错了什么?

class GestureDetectorGrid extends SimpleOnGestureListener 
{
        /**
         * Sliding from right to the left to move to another grid
         */
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, 
                              float velocityX,float velocityY) 
        {
            //my code
            return false;    
        }

        /**
         * Go to another Activity by clicking on a element from the grid. 
         */
        @Override
        public boolean onSingleTapUp(MotionEvent e) 
        {
            //my code
            return true;
        }

        @Override
        public void onLongPress(MotionEvent e) 
        {
            //my code
            super.onLongPress(e);
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2,
                               float distanceX, float distanceY) 
        {
            //my code
            return true;
        }

        @Override
        public void onShowPress(MotionEvent e) 
        {
            super.onShowPress(e);
        }

        @Override
        public boolean onDown(MotionEvent e) 
        {
            //my code
            return true;
        }
}

我的问题与重复不同,因为我想知道为什么Android GestureDetector假设onFling而不是onSingleTapUp。或者如果我做错了什么。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, 
                       float velocityX,float velocityY) {

    int posIni = pointToPosition((int) e1.getX(), (int) e1.getY());

    int posFin = pointToPosition((int) e2.getX(), (int) e2.getY());

    if( posIni == posFin ) { 
         //onClick code
    }
    else {
         //onFling code.
    }
    return true;    
}