您的位置:首页 > 其它

SlidingMenu+ViewPage+ListView嵌套(类似网易 ) ListView点击事件失效冲突问题解决

2014-03-14 17:17 639 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐