ViewPager嵌套ViewPager後子ViewPager滑動不正常問題

ViewPager嵌套ViewPager後,滑動事件無法在子ViewPager裏面響應。android

解決辦法是自定義子ViewPager。app

如下代碼是轉載的,經本人測試,能夠用!!!ide

轉載地址:http://blog.csdn.net/leewenjin/article/details/21011841測試

 

 

package com.lwj.app.customview;this

 

import android.content.Context;spa

import android.graphics.PointF;.net

import android.support.v4.view.ViewPager;blog

import android.util.AttributeSet;事件

import android.view.MotionEvent;get

 

public class ChildViewPager extends ViewPager{

   

    PointF downP = new PointF();

   

    PointF curP = new PointF();

    OnSingleTouchListener onSingleTouchListener;

 

    public ChildViewPager(Context context, AttributeSet attrs) {

        super(context, attrs);

        // TODO Auto-generated constructor stub

    }

 

    public ChildViewPager(Context context) {

        super(context);

        // TODO Auto-generated constructor stub

    }

 

    @Override

    public boolean onInterceptTouchEvent(MotionEvent arg0) {

        // TODO Auto-generated method stub

        //當攔截觸摸事件到達此位置的時候,返回true,

        //說明將onTouch攔截在此控件,進而執行此控件的onTouchEvent

        return true;

    }

 

    @Override

    public boolean onTouchEvent(MotionEvent arg0) {

        // TODO Auto-generated method stub

        //每次進行onTouch事件都記錄當前的按下的座標

        curP.x = arg0.getX();

        curP.y = arg0.getY();

 

        if(arg0.getAction() == MotionEvent.ACTION_DOWN){

            //記錄按下時候的座標

            //切記不可用 downP = curP ,這樣在改變curP的時候,downP也會改變

            downP.x = arg0.getX();

            downP.y = arg0.getY();

            //此句代碼是爲了通知他的父ViewPager如今進行的是本控件的操做,不要對個人操做進行干擾

            getParent().requestDisallowInterceptTouchEvent(true);

        }

 

        if(arg0.getAction() == MotionEvent.ACTION_MOVE){

            //此句代碼是爲了通知他的父ViewPager如今進行的是本控件的操做,不要對個人操做進行干擾

            getParent().requestDisallowInterceptTouchEvent(true);

        }

 

        if(arg0.getAction() == MotionEvent.ACTION_UP){

            //在up時判斷是否按下和鬆手的座標爲一個點

            //若是是一個點,將執行點擊事件,這是我本身寫的點擊事件,而不是onclick

            if(downP.x==curP.x && downP.y==curP.y){

                onSingleTouch();

                return true;

            }

        }

 

        return super.onTouchEvent(arg0);

    }

 

       

    public void onSingleTouch() {

        if (onSingleTouchListener!= null) {

 

            onSingleTouchListener.onSingleTouch();

        }

    }

 

   

    public interface OnSingleTouchListener {

        public void onSingleTouch();

    }

 

    public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) {

        this.onSingleTouchListener = onSingleTouchListener;

    }

 

}

相關文章
相關標籤/搜索