如何实现多项选择的按住并拖动功能?

时间:2018-09-28 07:48:01

标签: android samsung-galaxy

三星手机具有此功能,您可以将手指放在某个项目上然后向下拖动,就像gif一样,我可以快速选择多个项目

即使仅适用于三星设备,我有什么方法可以在我的应用程序中实现此功能?

  

示例图片

enter image description here

1 个答案:

答案 0 :(得分:0)

  

即使仅适用于三星设备

您可以在任何设备上实现此功能。我首先在Mi设备中发现了此功能。

有点复杂。但是您可以将DragSelectRecyclerView之类的库用于此目的。

在您的 build.gradle中添加以下代码:

dependencies {
    implementation 'com.github.MFlisar:DragSelectRecyclerView:0.3'
}

在您的Java文件中,添加以下代码:

创建触摸监听器。

mDragSelectTouchListener = new DragSelectTouchListener()
.withSelectListener(onDragSelectionListener)
// following is all optional
.withMaxScrollDistance(distance)    // default: 16;     defines the speed of the auto scrolling
.withTopOffset(toolbarHeight)       // default: 0;      set an offset for the touch region on top of the RecyclerView
.withBottomOffset(toolbarHeight)    // default: 0;      set an offset for the touch region on bottom of the RecyclerView
.withScrollAboveTopRegion(enabled)  // default: true;   enable auto scrolling, even if the finger is moved above the top region
.withScrollBelowTopRegion(enabled)  // default: true;   enable auto scrolling, even if the finger is moved below the top region
.withDebug(enabled);

将此触摸侦听器附加到RecyclerView

recyclerView.addOnItemTouchListener(mDragSelectTouchListener);

长按项目时,通知听众开始拖动选择。

mDragSelectTouchListener.startDragSelection(position);

使用DragSelectionProcessor,它可以实现上述界面,并可以设置4种模式:

  1. Simple:只需选择您要经过的每个项目,然后在退回时取消选择
  2. ToggleAndUndo:切换每个项目的原始状态,移回时恢复为原始状态
  3. FirstItemDependent:切换第一项并将相同的状态应用于您经过的每个项目,并在向后移动时应用反转状态
  4. FirstItemDependentToggleAndUndo:切换项目并将相同的状态应用于您经过的每个项目,并在移回时恢复为原始状态

在其构造函数中提供ISelectionHandler并实现以下功能:

onDragSelectionListener = new DragSelectionProcessor(new DragSelectionProcessor.ISelectionHandler() {
    @Override
    public Set<Integer> getSelection() {
        // return a set of all currently selected indizes
        return selection;
    }

    @Override
    public boolean isSelected(int index) {
        // return the current selection state of the index
        return selected;
    }

    @Override
    public void updateSelection(int start, int end, boolean isSelected, boolean calledFromOnStart) {
        // update your selection
        // range is inclusive start/end positions
        // and the processor has already converted all events according to it'smode
    }
})
// pass in one of the 4 modes, simple mode is selected by default otherwise
.withMode(DragSelectionProcessor.Mode.FirstItemDependentToggleAndUndo);

您可以看到一个演示活动here

还有其他相同目的的库吗?

是的,您还可以使用 afollestad Drag Select Recycler View。并且您可以看到afollestad的Drag select Recycler View here的实际实现。