Android 拦截回收器查看手势左右滑动,安卓?

Android 拦截回收器查看手势左右滑动,安卓?,android,android-recyclerview,ontouchlistener,Android,Android Recyclerview,Ontouchlistener,我有一个回收站。当用户向右或向左滑动时,执行一些操作。 请注意,我不是要求回收者查看项目刷卡,而是要求整个回收者查看手势向左或向右 为此,我扩展了View.OnTouchListener,并尝试获得如下姿势 public class OnSwipeTouchListener implements View.OnTouchListener { private final GestureDetector gestureDetector; public OnSwipeTouchListener(C

我有一个回收站。当用户向右或向左滑动时,执行一些操作。 请注意,我不是要求回收者查看项目刷卡,而是要求整个回收者查看手势向左或向右

为此,我扩展了View.OnTouchListener,并尝试获得如下姿势

public class OnSwipeTouchListener implements View.OnTouchListener {

private final GestureDetector gestureDetector;

public OnSwipeTouchListener(Context ctx) {
    gestureDetector = new GestureDetector(ctx, new GestureListener());
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}

private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

    private static final int SWIPE_THRESHOLD = 100;
    private static final int SWIPE_VELOCITY_THRESHOLD = 100;

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        boolean result = false;
        try {
            float diffY = e2.getY() - e1.getY();
            float diffX = e2.getX() - e1.getX();
            if (Math.abs(diffX) > Math.abs(diffY)) {
                if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffX > 0) {
                        onSwipeRight();
                    } else {
                        onSwipeLeft();
                    }
                    result = true;
                }
            } /*else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                if (diffY > 0) {
                    onSwipeBottom();
                } else {
                    onSwipeTop();
                }
                result = true;
            }*/
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return result;
    }
}

public void onSwipeRight() {
}

public void onSwipeLeft() {
}


/*public void onSwipeTop() {
}

public void onSwipeBottom() {
}
*/
}
然后把它当作

recyclerViewComponent.setOnTouchListener(new OnSwipeTouchListener(context){
        @Override
        public void onSwipeRight() {
            super.onSwipeRight();
        }

        @Override
        public void onSwipeLeft() {
            super.onSwipeLeft();
        }
    });
但是我没有收到回电。这有什么不对?

根据该官员的说法,在处理
视图组时,您必须使用
onInterceptTouchEvent
RecyclerView
扩展
视图组
)。 因此,您必须扩展
RecyclerView
类,以覆盖其
onTouchInterceptTouchEvent
方法:

public class MyRecyclerView extends RecyclerView {

   @Override
   public boolean onInterceptTouchEvent(MotionEvent ev) {
       switch (MotionEventCompat.getActionMasked(ev)) {
          case MotionEvent.ACTION_MOVE: {
           [...]
          }
       }        
   }

}
然后,您还必须更改布局XML文件以使用自定义的
RecyclerView
MyRecyclerView


或者,您可以调整涉及第三方组件/库的解决方案,如或。

到目前为止您取得了任何进展吗?@alex没有,我仍在努力找出答案。如果您找到了解决方案,请务必告诉我。您是否尝试过我的建议继承
RecyclerView
?@alex我尝试过,但没有成功。我在parent recyclerview中有一个child recyclerview,我想在child recyclerview上左/右滑动,您是否创建了自己的类来扩展
recyclerview