这个问题是有点老了,这个问题显而易见,就是scrollview拦截了触摸事件,今天又认真看了一遍事件分发机制部分源代码,只需要重写ScrollView的dispatchTouchEvent在调用super.dispatchTouchEvent(ev)之前设置requestDisallowInterceptTouchEvent不允许拦截即可。
public class MyScrollview extends ScrollView{ public MyScrollview(Context context) { super(context); } public MyScrollview(Context context, AttributeSet attrs) { super(context, attrs); } public MyScrollview(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { requestDisallowInterceptTouchEvent(true); return super.dispatchTouchEvent(ev); } }
解决方法的一句就是viewgroup在调用dispatchTouchEvent之后会先去调用onInterceptTouchEvent判断是否需要拦截。而在调用onInterceptTouchEvent之前会有一个disallowIntercept的判断,源码部分如下:
查询之后发现disallowIntercept会在requestDisallowInterceptTouchEvent中进行赋值
至于其他的解决方法,网上应该可以找到很多,写这篇博客只是为了加深自己的记忆,也希望能帮到你。