RecyclerView长按拖拽排序 ,缩短长按响应时间,长按0.1秒就可以开始拖动
度娘搜索RecyclerView长按拖拽排序,很多文章讲解,没找到缩短长按响应时间的,所以自己研究了一下
本文借鉴其他博客实现基本的拖拽排序功能,修改长按响应时间是自己实现的,转载请注明原文链接
先看效果图
上代码(核心代码 重写itemtouchhelper)
代码有注释,有问题可以评论回复,尽量及时答复
package com.example.itemtouchhelper;
import android.app.Service;
import android.graphics.Color;
import android.os.Handler;
import android.os.Vibrator;
import android.view.MotionEvent;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.Collections;
import java.util.List;
/**
* @author FANG SHIXIAN
* @date 2020/6/23.
* description:
*/
public class MyItemTouchHelper {
/**
* 已选图片拖动改变顺序,
* 禁止添加图片的item拖拽,
* 拖拽到添加图片的位置不响应位置交换
*/
public static <T> void initItemTouchHelper(final RecyclerView recycler, final RecyclerView.Adapter adapter, final List<T> list) {
ItemTouchHelper helper;
ItemTouchHelper.Callback callback = new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
//某个类型的viewHolder不可拖动
// if (viewHolder instanceof XXViewHolder){ // XXViewHolder 是不可拖动的viewHolder类型,使用的时候替换
// return makeMovementFlags(0,0);
// }
int dragFlag = 0;
if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
//GridLayout布局允许 上下左右 拖动
dragFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
} else