Closed GhRyuJin closed 8 years ago
嵌入水平滑动的控件,目前确实会有手势冲突,后面会解决这个问题
我也是類似問題 使用套件是 RecyclerView LinearLayoutManager.HORIZONTAL 請問該朝什麼方向 解决这个问题 謝謝 套件好使用 呈現也很美 感謝
你好,我是SpringView的作者,左右滑动确实存在滑动冲突,最近正好自己处于换工作期间,实在没有闲暇时间解决问题,SpringView的大体实现思路是在dispatchTouchEvent中对手势进行识别,通过设置isNeedMyMove标志位来决定将事件交给SpringView处理还是内部控件处理。左右滑动是我没有考虑到的,你可以修改dispatchTouchEvent中的isNeedMyMove()方法,判断滑动方向与竖直方向的夹角,大于45度认定为水平滑动,则返回false,将isNeedMyMove设置为false,这样滑动事件将交给内部控件处理,SpringView不做拦截
@Samsu7609 我一开始是打算在Springview里面的isNeedMyMove()方法里做修改的,后来改了发现有些问题,只能用一个变通的方法了,那就是继承内部控件(水平滑动的控件),重写dispatchTouchEvent方法,具体代码如下
private int mLastY;
private int mLastX;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
int y = (int) ev.getY();
int x = (int) ev.getX();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
int deltaY = y - mLastY;
int deltaX = x - mLastX;
if (Math.abs(deltaY)>Math.abs(deltaX)) {
// 上下滑动的距离大于左右滑动的距离,请求父控件拦截
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
default:
break;
}
mLastX = x;
mLastY = y;
return super.dispatchTouchEvent(ev);
}
@GhRyuJin 所以您是說 我需要 extends RecyclerView 然後 Override dispatchTouchEvent 來避免衝突的問題嗎?
謝謝
我在swipemenulistview外面嵌套了一个SpringView,导致swipermenulistview的滑动删除变得不好用了