9

我在 ViewPager 中有一个水平 ScrollView。为了防止在到达 ScrollView 末尾时滚动 ViewPager,我按照 SO 上的提示使用此类:

public class CustomScrollView extends HorizontalScrollView {

public CustomScrollView(Context p_context, AttributeSet p_attrs) {
    super(p_context, p_attrs);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent p_event) {

    return true;
}

@Override
public boolean onTouchEvent(MotionEvent p_event) {


    if (p_event.getAction() == MotionEvent.ACTION_MOVE
            && getParent() != null) {
        getParent().requestDisallowInterceptTouchEvent(true);
    }

    return super.onTouchEvent(p_event);
}
}

onInterCeptTouchEvent似乎消耗了对该视图及其内部所有内容的任何点击。当我投入Views其中ScrollView时,他们的OnClickListener的 s 不会被调用。

当我让onInterceptTouchEventreturn false 时,OnClickListeners 被调用,但ScrollView不能滚动。

我怎样才能把可点击的视图放在里面ScrollView

编辑:在实现 Rotem 的答案后,onClickListener工作正常,但它不仅会触发点击事件,还会触发其他事件,比如投掷。如何防止这种情况?

4

3 回答 3

11

尝试调用onTouchEvent里面的执行onInterceptTouchEvent然后返回false。

于 2013-04-15T14:48:20.243 回答
5

好吧,在开始赏金几分钟后,我发现了它是如何工作的:

onInterceptTouchEvent

return super.onInterceptTouchEvent(p_event);
于 2013-04-23T11:32:32.793 回答
1

这是使用此问题的答案的完整解决方案。

public class CustomHorizontalScrollView extends HorizontalScrollView {

        public CustomHorizontalScrollView(Context context) {
                super(context);

        }
        public CustomHorizontalScrollView(Context context, AttributeSet attrs) {
                super(context, attrs);
        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
                boolean result = super.onInterceptTouchEvent(ev);
                if(onTouchEvent(ev)) {
                        return result;
                } else {
                        return false;
                }
        }

        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            if (ev.getAction() == MotionEvent.ACTION_MOVE
                    && getParent() != null) {
                getParent().requestDisallowInterceptTouchEvent(true);
            }
                return super.onTouchEvent(ev);
        }

}
于 2014-01-15T07:55:01.547 回答