recyclerView 设置 draglistener 判断拖动事件是否在item范围内
时间: 2024-02-22 07:56:48 浏览: 25
可以通过RecyclerView的LayoutManager获取到当前屏幕显示的所有Item的范围,然后在拖动事件的ACTION_DRAG_LOCATION事件中获取当前事件的x和y坐标,判断当前事件是否在当前屏幕显示的Item的范围内。具体实现可以参考以下代码:
```
recyclerView.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
RecyclerView recyclerView = (RecyclerView) v;
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// do something
break;
case DragEvent.ACTION_DRAG_LOCATION:
int x = (int) event.getX();
int y = (int) event.getY();
int itemCount = layoutManager.getItemCount();
for (int i = 0; i < itemCount; i++) {
View itemView = layoutManager.findViewByPosition(i);
Rect rect = new Rect();
itemView.getGlobalVisibleRect(rect);
if (rect.contains(x, y)) {
// 当前事件在当前屏幕显示的Item范围内
// do something
break;
}
}
break;
case DragEvent.ACTION_DRAG_ENDED:
// do something
break;
default:
break;
}
return true;
}
});
```
在上面的代码中,我们通过RecyclerView的LayoutManager获取到当前屏幕显示的所有Item的范围,并在拖动事件的ACTION_DRAG_LOCATION事件中遍历所有的Item,判断当前事件是否在当前屏幕显示的Item的范围内。如果在范围内,就执行相应的操作。注意,这里使用的是itemView.getGlobalVisibleRect()方法获取到Item的范围,因为局部可见的Item可能会被RecyclerView的滑动机制隐藏掉,所以需要获取全局可见的范围。