Android 截获的ScrollView干扰子onClick事件

Android 截获的ScrollView干扰子onClick事件,android,Android,我有一个自定义ScrollView的布局,在它下面有水平viewpager和TextView。 如果我使用解释器ScrollView而不是ScrollView,则文本视图的onClick将停止工作。 我需要解释器ScrollView以允许在ViewPager中水平滚动 <com.package.InterceptedScrollView <ViewPager // scrolls horizontally thanks to InterceptedScrollView

我有一个自定义ScrollView的布局,在它下面有水平viewpager和TextView。 如果我使用解释器ScrollView而不是ScrollView,则文本视图的onClick将停止工作。 我需要解释器ScrollView以允许在ViewPager中水平滚动

<com.package.InterceptedScrollView
   <ViewPager
    // scrolls horizontally thanks to InterceptedScrollView
     />
   ...
   <TextView
      // try scrolling vertically by touching this imageView and it doesn't scroll
      onClick="something"/>
</com.package.InterceptedScrollView>

为什么我的InterceptedScrollview会吃掉一次TextView?如何修复它?

我的自定义ScrollView使用xScroll和yScroll的totalSize。 我记录当前的xPoint和yPoint,当单击向下时。 当它移动时计算它

public class PageScrollView extends ScrollView {

    private float xDistance, yDistance, lastX, lastY;

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

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {

    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDistance = yDistance = 0f;
            lastX = ev.getX();
            lastY = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            final float curX = ev.getX();
            final float curY = ev.getY();
            xDistance += Math.abs(curX - lastX);
            yDistance += Math.abs(curY - lastY);
            lastX = curX;
            lastY = curY;
            if(xDistance > yDistance)
                return false;
    }

    return super.onInterceptTouchEvent(ev);
}
}
public class PageScrollView extends ScrollView {

    private float xDistance, yDistance, lastX, lastY;

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

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {

    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDistance = yDistance = 0f;
            lastX = ev.getX();
            lastY = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            final float curX = ev.getX();
            final float curY = ev.getY();
            xDistance += Math.abs(curX - lastX);
            yDistance += Math.abs(curY - lastY);
            lastX = curX;
            lastY = curY;
            if(xDistance > yDistance)
                return false;
    }

    return super.onInterceptTouchEvent(ev);
}
}