外部拦截法:
public class ListScrollView extends ScrollView { private XListView xListView; public ListScrollView(Context context) { super(context); } public ListScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public XListView getxListView() { return xListView; } public void setxListView(XListView xListView) { this.xListView = xListView; } /** * 覆写onInterceptTouchEvent方法,点击操作发生在ListView的区域的时候, * 返回false让ScrollView的onTouchEvent接收不到MotionEvent,而是把Event传到下一级的控件中 */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (xListView != null && checkArea(xListView, ev)) { return false; } return super.onInterceptTouchEvent(ev); } /** * 测试view是否在点击范围内 * @param v * @return */ private boolean checkArea(View v, MotionEvent event){ float x = event.getRawX(); float y = event.getRawY(); int[] locate = new int[2]; v.getLocationOnScreen(locate); int l = locate[0]; int r = l + v.getWidth(); int t = locate[1]; int b = t + v.getHeight(); if (l < x && x < r && t < y && y < b) { return true; } return false; } }
使用时,要在listscrollview中设置xlistview:
listSV.setListView(lv);
文章来源: https://blog.csdn.net/songzi1228/article/details/88861766