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;
}
}