問題描述:ide
父控件是一個ScrollView,而後上面排滿了按鈕,相似於支付寶事件
這樣,按鈕都有onclick事件,這樣滑動的時候若是接觸點在按鈕上,ScrollView就滑不動了。支付寶
解決方案是重寫ScrollView 的onInterceptTouchEvent方法:get
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的時候就進行攔截響應,再也不往下傳遞。io