转载来源:https://blog.csdn.net/sinat_28765197/article/details/81317011
这个问题是有点老了,这个问题显而易见,就是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中进行赋值
至于其他的解决方法,网上应该可以找到很多,写这篇博客只是为了加深自己的记忆,也希望能帮到你。
---------------------
作者:被门夹的核桃还补脑吗
来源:CSDN
原文:https://blog.csdn.net/sinat_28765197/article/details/81317011
版权声明:本文为博主原创文章,转载请附上博文链接!