项目地址
问题描述
如代码中的布局嵌套,首页中在PtrFrameLayout
中嵌套ListView
,在ListView
的Item
嵌套ViewPager
,也就是这三个控件之间的恩恩怨怨,争宠搞事情,滑动冲突可描述为:
https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh
<?xml version="1.0" encoding="utf-8"?>
<PtrClassicFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"
android:fadingEdge="none"
android:listSelector="@android:color/transparent"
android:scrollbarStyle="outsideOverlay" />
</PtrClassicFrameLayout>
解决方案
试过网上的各种解决方法,都没有见效,难道是我用了假的搜索引擎,闲话不再多说,上代码:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mListView.requestDisallowInterceptTouchEvent(true);
mPtrLayout.setEnabled(false);
break;
case MotionEvent.ACTION_MOVE:
int moveX = (int) ev.getX();
int moveY = (int) ev.getY();
//ViewPager滑动
if (Math.abs(moveX-mDownX) > Math.abs(moveY-mDownY)) {
mListView.requestDisallowInterceptTouchEvent(true);
mPtrLayout.setEnabled(false);
//ListView滑动
}else {
mListView.requestDisallowInterceptTouchEvent(false);
mPtrLayout.setEnabled(true);
}
mDownX = moveX;
mDownY = moveY;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
mPtrLayout.setEnabled(true);
break;
}
return super.dispatchTouchEvent(ev);
}
总结
纵然网上有无限的资源,适合自己的才是最好的,要善于思考,发现问题的根本原因,进而找出解决方案~