1. 程式人生 > >ScrollView ViewPager巢狀導致滑動衝突解決方案

ScrollView ViewPager巢狀導致滑動衝突解決方案

開發是遇到類似淘寶產品介紹的介面


存在srollView也ViewPager滑動衝突的問題,使用者體驗不好。

於是對srollView做了自定義控制元件,解決了該問題,處理思想:如果滑動左右滑動大於上下滑動,在OnInterceptTouchEvent中直接return false,將處理交給viewPager.

public class MyScrollView extends ScrollView {
    // 滑動距離及座標
    private float xDistance, yDistance, xLast, yLast;
    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                xDistance = yDistance = 0f;
                xLast = ev.getX();
                yLast = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                final float curX = ev.getX();
                final float curY = ev.getY();

                xDistance += Math.abs(curX - xLast);
                yDistance += Math.abs(curY - yLast);
                xLast = curX;
                yLast = curY;

                if(xDistance > yDistance){
                    return false;
                }
        }

        return super.onInterceptTouchEvent(ev);
    }
}

程式碼很簡單。ScollView原始碼解析