下层还有一个横向滑动隐藏直播间信息的view,导致下层事件无法响应,怎么处理事件分发
参考:http://blog.csdn.net/duolaimila/article/details/72189790
刚刚看了花椒直播,发现如果既想要左右滑动显示直播间信息,又要上下滑动切换房间,有两种方法,1.就是上面那种 2.对于不想改动太多的就采用花椒直播的方式,在房间布局最上层加上一个verticalViewpager
,重写Viewpager的dispatchTouchEvent方法,在其中判断左右滑动动作,来显示/隐藏房间布局。记住,把房间布局放在verticalViewpager。
我之前也遇到了类似的问题,解决思路就是滑动拦截,你的控件复写onInterceptTouchEvent(),如下:
private float x1 = 0;
private float x2 = 0;
private float y1 = 0;
private float y2 = 0;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final float x = ev.getX();
final float y = ev.getY();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = ev.getX();
y1 = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
int xDiff = (int) Math.abs(x - mLastMotionX);
int yDiff = (int) Math.abs(y - mLastMotionY);
final int x_yDiff = xDiff * xDiff + yDiff * yDiff;
boolean xMoved = x_yDiff > mTouchSlop * mTouchSlop;
LogUtil.myLog("xMoved:" + xMoved);
if (xMoved) {
LogUtil.myLog("xM:" + (xDiff > yDiff * 4));
// return xDiff > yDiff * 4;
}
break;
case MotionEvent.ACTION_UP:
LogUtil.myLog("ACTION_UP:");
//当手指离开的时候
x2 = ev.getX();
y2 = ev.getY();
if (y1 - y2 > 50) {
TU.init().CustomShort("向上滑");
} else if (y2 - y1 > 50) {
TU.init().CustomShort("向下滑");
} else if (x1 - x2 > 50) {
TU.init().CustomShort("向左滑");
} else if (x2 - x1 > 50) {
TU.init().CustomShort("向右滑");
}
break;
}
return super.onInterceptTouchEvent(ev);
}
在手指抬起的时候,也就是MotionEvent.ACTION_UP:你判断滑动方向,把不是这个方向上的滑动直接拦截掉,直接return ture