解決ViewPage中嵌套有ListView或者滑動手勢等形成滑動的衝突

public class ViewPagerCompat extends ViewPager {android

//mViewTouchMode表示ViewPager是否全權控制滑動事件,默認爲false,即不控制
private boolean mViewTouchMode = false;ios

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

public void setViewTouchMode(boolean b) {
if (b && !isFakeDragging()) {
//全權控制滑動事件
beginFakeDrag();
} else if (!b && isFakeDragging()) {
//終止控制滑動事件
endFakeDrag();
}
mViewTouchMode = b;
}事件

/**
* 在mViewTouchMode爲true的時候,ViewPager不攔截點擊事件,點擊事件將由子View處理
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (mViewTouchMode) {
return false;
}
return super.onInterceptTouchEvent(event);
}io

@Override
public boolean onTouchEvent(MotionEvent ev) {
try {
return super.onTouchEvent(ev);
} catch (Exception e) {
return false;
}
}event

/**
* 在mViewTouchMode爲true或者滑動方向不是左右的時候,ViewPager將放棄控制點擊事件,
* 這樣作有利於在ViewPager中加入ListView等能夠滑動的控件,不然二者之間的滑動將會有衝突
*/
@Override
public boolean arrowScroll(int direction) {
if (mViewTouchMode) return false;
if (direction != FOCUS_LEFT && direction != FOCUS_RIGHT) return false;
return super.arrowScroll(direction);
}class

}List

 

杭州ios交流羣  372471379      杭州android交流羣:369469730di

相關文章
相關標籤/搜索