項目地址
問題描述
如代碼中的布局嵌套,首頁中在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);
}
總結
縱然網上有無限的資源,適合自己的才是最好的,要善于思考,發現問題的根本原因,進而找出解決方案~