SlidingView 方法onInterceptTouchEvent修改
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// System.out.println("SlidingView onInterceptTouchEvent");
try{
final int action = ev.getAction();
final float x = ev.getX();
final float y = ev.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
mIsAlreadySetViewState = false;
mLastMotionX = x;
mLastMotionY = y;
mIsBeingDragged = false;
break;
case MotionEvent.ACTION_MOVE:
final float dx = x - mLastMotionX;
final float xDiff = Math.abs(dx);
final float yDiff = Math.abs(y - mLastMotionY);
if(askChild(this,ev, dx,dx)){
return false;
}
if (xDiff > mTouchSlop && xDiff > yDiff) {
mIsBeingDragged = true;
mLastMotionX = x;
}
break;
}
return mIsBeingDragged;
}catch(IllegalArgumentException ex) {
ex.printStackTrace();
return false;
}
}
private boolean askChild(Object v,MotionEvent ev,float dx,float xDiff ){
ViewGroup vg = null;
if(v instanceof ViewGroup){
vg = (ViewGroup)v;
}else{
return false;
}
for(int i=0;i<vg.getChildCount();i++){
if (vg.getChildAt(i) instanceof HorizontalScrollView) {//(这是以HorizontalScrollView为例,其它可以自行加判断)
return ((ViewGroup)vg.getChildAt(i)).onInterceptTouchEvent(ev);
}else if (vg.getChildAt(i) instanceof MyViewPage) {
// System.out.println(" instanceof MyViewPage"+((ViewGroup)vg.getChildAt(i)).onInterceptTouchEvent(ev));
System.out.println(xDiff +"-----------"+scrollX);
MyViewPage mvp=( MyViewPage) vg.getChildAt(i);
if(mvp.getPosition()==0)
if(xDiff>0)//右滑
return false;//((ViewGroup)vg.getChildAt(i)).onInterceptTouchEvent(ev);
else
if(scrollX<0)//左侧出来
return false;
else
return true;
else
return true;
}
if(askChild(vg.getChildAt(i), ev,dx,xDiff )){
return true;
}
}
return false;
}
float scrollX =0;
之前ViewPage的onInterceptTouchEvent重写 去掉了,不用重写了
代码
http://download.csdn.net/detail/lj102800/7041393