現在最頭疼的事就是需求不明確,這不,有遇到你個奇葩需求,父viewPager總共有三個選項卡,第一個選項卡里嵌入一個子viewPager,這時候問題就來了,子viewPager無法滑動,我猜的事父viewPager把子viewPager攔截了,於是嘗試了下面的第一種方法
1.重寫父viewPager的onInterceptTouchEvent方法
/**
* @author 子墨
*
* 2015-2-26上午8:59:50
*/
public class MyViewPager extends ViewPager {
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
return false;
}
}
當然方法很多,也可以嘗試重寫子viewPager
2.重寫子viewPager,通過getParent().requestDisallowInterceptTouchEvent(true)方法 通知父控件不攔截
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
PointF downPoint = new PointF();
OnSingleTouchListener onSingleTouchListener;
@Override
public boolean onTouchEvent(MotionEvent evt) {
switch (evt.getAction()) {
case MotionEvent.ACTION_DOWN:
// 記錄按下時候的坐標
downPoint.x = evt.getX();
downPoint.y = evt.getY();
if (this.getChildCount() > 1) { //有內容,多於1個時
// 通知其父控件,現在進行的是本控件的操作,不允許攔截
getParent().requestDisallowInterceptTouchEvent(true);
}
break;
case MotionEvent.ACTION_MOVE:
if (this.getChildCount() > 1) { //有內容,多於1個時
// 通知其父控件,現在進行的是本控件的操作,不允許攔截
getParent().requestDisallowInterceptTouchEvent(true);
}
break;
case MotionEvent.ACTION_UP:
// 在up時判斷是否按下和松手的坐標為一個點
if (PointF.length(evt.getX() - downPoint.x, evt.getY()
- downPoint.y) < (float) 5.0) {
onSingleTouch(this);
return true;
}
break;
}
return super.onTouchEvent(evt);
}
public void onSingleTouch(View v) {
if (onSingleTouchListener != null) {
onSingleTouchListener.onSingleTouch(v);
}
}
public interface OnSingleTouchListener {
public void onSingleTouch(View v);
}
public void setOnSingleTouchListener(
OnSingleTouchListener onSingleTouchListener) {
this.onSingleTouchListener = onSingleTouchListener;
}
}
重寫子viewpager代碼摘自杭州山不高
其實上面的兩種方法更傾向於第一種,當然第二種也能解決問題,但是第二種會破壞事件分發的流程,直接告訴父控件不要攔截,我自己的是自己處理,總歸有些霸道,哈哈,不符合中庸之道
這樣寫能解決問題,但是體驗不好,最后還是放棄了,我只是分享我遇到的問題和解決方法,如果你有更好的方法,互相交流。
---------------------
作者:子墨_
來源:CSDN
原文:https://blog.csdn.net/ElinaVampire/article/details/43950613
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!