도움이 될 것입니다.
ItemTouchHelper.Callback
에는 ViewHolders
목록에서 놓기보기 아래에있는 놓기 대상을 선택하고보기를 끌 때 여러 번 호출되는 choseDropTarget()
이라는 메서드가 있습니다. 여기에는 드래그 된보기가 아래보기를 가리키고있을 때 및 호버링이 중지 될 때를 계산하는 정보가 있습니다.
@Override
public RecyclerView.ViewHolder chooseDropTarget(RecyclerView.ViewHolder selected, List<RecyclerView.ViewHolder> dropTargets, int curX, int curY) {
for (RecyclerView.ViewHolder target : dropTargets) {
int top = curY - selected.itemView.getTop();
int bottom = curY + selected.itemView.getHeight();
int diff;
if (top < 0) {
diff = target.itemView.getTop() - curY;
} else {
diff = target.itemView.getBottom() - bottom;
}
if (Math.abs(diff) <= 100) {
adapter.onItemHover();
} else {
adapter.onItemHoverFinish();
}
}
return super.chooseDropTarget(selected, dropTargets, curX, curY);
}
있어서 드래그 뷰와 밑면과의 차이가 작은 경우보다 100 onItemHover()
콜백이 호출되고, 그렇지 onItemHoverFinished()
간의 오프셋 차이를 계산한다.
이 문제에 대해 좀 더 우아한 방법이 있다면 알려주십시오. 감사!
LayoutManager는 뷰 위치를 처리합니다. ItemAnimator와 연계하여 LinearLayoutManager를 자세히 살펴보십시오 ... RecyclerView를 만든 사람들의 멋진 동영상이 있습니다 https://www.youtube.com/watch?v=LqBlYJTfLP4 –
[예제] (https : // github.com/iPaulPro/Android-ItemTouchHelper-Demo)? – elgringo
@elgringo 예, 드래그 앤 드롭 구현에 대한 지침서입니다. –