您的位置:首页 > 运维架构

ViewGrop 滑动与 子View点击事件冲突解决办法

2017-12-27 11:39 453 查看
横向滑动的ViewGroup中做如下操作

private boolean mScrolling;
private float touchDownX;
private float touchDownY;

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchDownX = event.getX();
touchDownY = event.getY();
mScrolling = false;
break;
case MotionEvent.ACTION_MOVE:
int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
if (Math.abs(touchDownX - event.getX()) >= slop || Math.abs(touchDownY - event.getY()) >= slop) {
mScrolling = true;
} else {
mScrolling = false;
}
break;
case MotionEvent.ACTION_UP:
mScrolling = false;
break;
}
return mScrolling;
}

private float x2 = 0;
private float y2 = 0;

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_UP:
x2 = event.getX();
y2 = event.getY();

float slop = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());

// swipe left
if (touchDownX - x2 > slop) {
// TODO 左滑操作
}
// swipe right
if (touchDownX - x2 < -slop) {
// TODO 右滑操作
}
break;
}

return super.onTouchEvent(event);
}


或者

private boolean mScrolling;
private float touchDownX;
private float touchDownY;

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchDownX = event.getX();
touchDownY = event.getY();
mScrolling = false;
break;
case MotionEvent.ACTION_MOVE:
int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
if (Math.abs(touchDownX - event.getX()) >= slop || Math.abs(touchDownY - event.getY()) >= slop) {
mScrolling = true;
} else {
mScrolling = false;
}
break;
case MotionEvent.ACTION_UP:
mScrolling = false;
break;
}
return mScrolling;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_UP:
int deltaX = (int) (event.getX() - touchDownX);
int deltaY = (int) (event.getY() - touchDownY);
int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
if (Math.abs(deltaX) > slop) {
// swipe left
if (deltaX < -Math.abs(deltaY) * 2) {
// TODO 左滑操作
}
// swipe right
if (deltaX >= Math.abs(deltaY) * 2) {
// TODO 右滑操作
}
}
break;
}

return super.onTouchEvent(event);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐