ViewPager相互嵌套,裏層ViewPager無法滑動的解決方法

ViewPager嵌套一個ViewPager典型的就是嵌套一個輪播圖,但是在低版本的裏層的ViewPager,是無法滑動的!

因爲外層的ViewPager,會攔截觸屏事件(TouchEvent)

通過重寫裏層控件的onTouchEvent方法,調用其父控件的requestDisallowInterceptTouchEvent()方法;使其父控件,不攔截觸屏事件(TouchEvent),以此,便能達到裏層的ViewPager,也能滑動的效果了。

package com.example.administrator.googleplay.views;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * 作者:Created by Kevin on 2016/2/1.
 * 郵箱:[email protected]
 * 描述:複寫子ViewPager,解決在低版本下ViewPager嵌套的問題
 */
public class InnerViewPager extends ViewPager{

    private float startX;
    private float startY;

    public InnerViewPager(Context context) {
        super(context);
    }

    public InnerViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                startX = ev.getRawX();
                startY = ev.getRawY();
                break;
            case MotionEvent.ACTION_MOVE:
                //判斷是左右滑動還是上下滑動
                float endX = ev.getRawX();
                float endY = ev.getRawY();
                if (Math.abs(endX - startX) > Math.abs(endY - startY) ){
                    //如果是左右滑動,請求父控件不要攔截自己的
                    getParent().requestDisallowInterceptTouchEvent(true);
                }else {
                    //如果是上下滑動,攔截設置爲false
                    getParent().requestDisallowInterceptTouchEvent(false);
                }


                break;
            case MotionEvent.ACTION_UP:
                break;
            default:
                break;
        }
        return super.onTouchEvent(ev);
    }
}

遇到的錯誤:
犯了一個低級錯誤,沒有加這個構造方法,導致在xml文件中不能使用

public InnerViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
發佈了75 篇原創文章 · 獲贊 6 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章