問題描述: ViewPager嵌套viewPager, 當childViewPager中加入了Onclick事件, 致使childViewpager的滑動消息被攔截掉。ide
很無奈。 this
解決方法: 重寫childviewPager, 攔截消息轉發.spa
public class ChildViewPager extends ViewPager { /** 觸摸時按下的點 **/ PointF downP = new PointF(); /** 觸摸時當前的點 **/ PointF curP = new PointF(); OnSingleTouchListener onSingleTouchListener; public ChildViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public ChildViewPager(Context context) { super(context); } @Override public boolean onInterceptTouchEvent(MotionEvent arg0) { // 當攔截觸摸事件到達此位置的時候,返回true, // 說明將onTouch攔截在此控件,進而執行此控件的onTouchEvent return true; } @Override public boolean onTouchEvent(MotionEvent arg0) { // 每次進行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; } }