Android 带OnTouchListener的Gridview滚动

Android 带OnTouchListener的Gridview滚动,android,gridview,ontouchlistener,Android,Gridview,Ontouchlistener,基本上,我想快速选择项目以及滚动Gridview。在OnItemClickListener中,滚动工作正常,但速度不快。选择多个项目,如OnTouchListener 我的代码: gridView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent me) { int action = me.getActionMasked()

基本上,我想快速选择项目以及滚动Gridview。在OnItemClickListener中,滚动工作正常,但速度不快。选择多个项目,如OnTouchListener

我的代码:

gridView.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent me) {

            int action = me.getActionMasked();  
            float currentXPosition = me.getX();
            float currentYPosition = me.getY();
            int position = gridView.pointToPosition((int) currentXPosition, (int) currentYPosition);

            switch (action) {
                case (MotionEvent.ACTION_MOVE):

                break;
                case (MotionEvent.ACTION_UP):
                    if (position != -1) {
                        //Here my logic to add item in basket list 
                        return true;
                    }
            }         
            return false;
        }
    });
private int moveCount=0;
private boolean ignore = false;

gridView.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent me) {

            v.getParent().requestDisallowInterceptTouchEvent(true);
            int action = me.getActionMasked();  // MotionEvent types such as ACTION_UP, ACTION_DOWN
            float currentXPosition = me.getX();
            float currentYPosition = me.getY();
            int position = gridView.pointToPosition((int) currentXPosition, (int) currentYPosition);
            if (ignore && action == MotionEvent.ACTION_UP)
                return false;
            switch (action) {
                case (MotionEvent.ACTION_MOVE):
                    moveCount++;
                    Log.d(DEBUG_TAG, "Action was MOVE " + position);
                    if(moveCount>3) {
                        ignore = true;
                    }

                    break;
                case (MotionEvent.ACTION_UP):
                    addItem(position);
                    Log.d(DEBUG_TAG, "Action was UP " + position);
                    return true;

                case (MotionEvent.ACTION_DOWN):
                    Log.d(DEBUG_TAG, "Action was DOWN " + position);
                    moveCount=0;
                    ignore = false;
                    return true;
                case (MotionEvent.ACTION_CANCEL):
                    addItem(position);
                    moveCount=0;
                    ignore = false;
                    gridView.setFocusable(true);

                    Log.d(DEBUG_TAG, "Action was CANCEL " + position);
                    return true;
                case (MotionEvent.ACTION_OUTSIDE):
                    Log.d(DEBUG_TAG, "Movement occurred outside bounds " +
                            "of current screen element " + position);
                    return true;

            }
            Log.d("clickTouch=", "" + position);
            return false;
        }
    });

现在它的滚动和添加项目以及。如何在
动作移动(滚动时)
后停止
动作向上(选择项)
事件?

我将此代码应用于OntouchListener上的scroll gridview并防止在选择项上滚动。在我身边工作得很好。如果有人有更好的解决办法,那就来吧

我的代码:

gridView.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent me) {

            int action = me.getActionMasked();  
            float currentXPosition = me.getX();
            float currentYPosition = me.getY();
            int position = gridView.pointToPosition((int) currentXPosition, (int) currentYPosition);

            switch (action) {
                case (MotionEvent.ACTION_MOVE):

                break;
                case (MotionEvent.ACTION_UP):
                    if (position != -1) {
                        //Here my logic to add item in basket list 
                        return true;
                    }
            }         
            return false;
        }
    });
private int moveCount=0;
private boolean ignore = false;

gridView.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent me) {

            v.getParent().requestDisallowInterceptTouchEvent(true);
            int action = me.getActionMasked();  // MotionEvent types such as ACTION_UP, ACTION_DOWN
            float currentXPosition = me.getX();
            float currentYPosition = me.getY();
            int position = gridView.pointToPosition((int) currentXPosition, (int) currentYPosition);
            if (ignore && action == MotionEvent.ACTION_UP)
                return false;
            switch (action) {
                case (MotionEvent.ACTION_MOVE):
                    moveCount++;
                    Log.d(DEBUG_TAG, "Action was MOVE " + position);
                    if(moveCount>3) {
                        ignore = true;
                    }

                    break;
                case (MotionEvent.ACTION_UP):
                    addItem(position);
                    Log.d(DEBUG_TAG, "Action was UP " + position);
                    return true;

                case (MotionEvent.ACTION_DOWN):
                    Log.d(DEBUG_TAG, "Action was DOWN " + position);
                    moveCount=0;
                    ignore = false;
                    return true;
                case (MotionEvent.ACTION_CANCEL):
                    addItem(position);
                    moveCount=0;
                    ignore = false;
                    gridView.setFocusable(true);

                    Log.d(DEBUG_TAG, "Action was CANCEL " + position);
                    return true;
                case (MotionEvent.ACTION_OUTSIDE):
                    Log.d(DEBUG_TAG, "Movement occurred outside bounds " +
                            "of current screen element " + position);
                    return true;

            }
            Log.d("clickTouch=", "" + position);
            return false;
        }
    });