问题描述:
父控件是一个ScrollView,然后上面排满了按钮,类似于支付宝
这样,按钮都有onclick事件,这样滑动的时候如果接触点在按钮上,ScrollView就滑不动了。
解决方案是重写ScrollView 的onInterceptTouchEvent方法:
public class PersonScrollView extends ScrollView{ public PersonScrollView(Context context) { super(context); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_MOVE) { return true; } return false; } }
原理很简单,就是事件在响应链里面是一直传递到叶子控件才进行处理,而在我的这个场景里,触点在按钮上的时候事件的叶子节点就是按钮,所以ScrollView不会响应滑动事件,解决思路就是在滑动事件传递到ScrollView的时候就进行拦截响应,不再往下传递。
来源:oschina
链接:https://my.oschina.net/u/2276921/blog/811565