如何在ListView滚动中阻止OnTouch

时间:2014-06-18 12:22:44

标签: android listview ontouchlistener

我的情况是我的ViewPager包含3个ListFragments。每个ListFragment当然都包含ListView。我有项目的自定义布局。我想要实现的是当我按下& hold项时,新片段以当前动画之上的动画开始。我想在用户发布项目后立即停止动画(删除片段)。我已将其实现为onTouchListner(下面的代码)。麻烦的是,当我按下项目时,我能够滚动ListView。我想阻止这一点。

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_DOWN:
                    touchDownTime = event.getDownTime();
                    mDownX = event.getX();
                    mDownY = event.getY();
                    isOnClick = true;

                    break;
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                    if (isOnClick
                            && fragment
                                    .isAnimation()) {
                        if (!fragment.isReleased()) {
                            fragment
                                    .cancelAnimation();
                        } else {
                            fragment
                                    .startReleaseAnimation();
                        }
                    }
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (isOnClick
                            && !fragment
                                    .isAnimation()
                            && (Math.abs(mDownX - event.getX()) > SCROLL_THRESHOLD || Math
                                    .abs(mDownY - event.getY()) > SCROLL_THRESHOLD)) {
                        isOnClick = false;
                    } else if (event.getEventTime() - touchDownTime > 150
                            && !fragment
                                    .isAnimation()) {
                        FragmentTransaction transaction = fragmentManager.beginTransaction();

                        transaction
                                .add(R.id.container,
                                        fragment)
                                .addToBackStack(null).commit();
                    }
                    break;
                default:
                    break;
                }

                return true;
            }
        });

1 个答案:

答案 0 :(得分:7)

您应该尝试requestDisallowInterceptTouchEvent

这样可以防止拦截触摸事件

试试这个

 @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_DOWN:
                    getParent().requestDisallowInterceptTouchEvent(true);
                    // Your code
                    break;
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                    getParent().requestDisallowInterceptTouchEvent(false);
                    // Your code
                    break;
                default:
                    break;
                }

                return true;
            }
        });