1. 程式人生 > >解決ViewPager 放在ListView 頭位置事件衝突

解決ViewPager 放在ListView 頭位置事件衝突

很多情況下,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攔截觸控事件。