解決ViewPager 放在ListView 頭位置事件衝突
阿新 • • 發佈:2018-11-21
很多情況下,ListView頭會放著一個橫向滑動的控制元件,不管是ViewPager還是其他自己寫的View 。都會有衝突,因為手指滑動無法保證百分之百的水平或者豎直,所以需要重寫頭部View的dispatchTouchEvent方法來解決問題。如下所示:
float mDownX;
float mDownY;
// 處理Viewpager作為ListView頭事件衝突
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getY();
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
if (Math.abs(ev.getX() - mDownX) > Math.abs(ev.getY() - mDownY)) {
getParent().requestDisallowInterceptTouchEvent(true );
} else {
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return super.dispatchTouchEvent(ev);
}
void android.view.ViewParent.requestDisallowInterceptTouchEvent(boolean disallowIntercept)
此方法的意思是:當子View不需要父View或者祖先View攔截觸控事件。
disallowIntercept = true 的意思是子View不希望父View攔截觸控事件。