RecyclerView长按拖动效果,用ItemTouchHelper实现

来源:互联网 发布:大数据平台 竞品分析 编辑:程序博客网 时间:2024/05/16 13:50

RecyclerView长按拖动效果,用ItemTouchHelper实现

话不多说,直接上代码

//NewItemTouchHelper继承自ItemTouchHelper.CallbackNewItemTouchHelper helper = new NewItemTouchHelper(context, adapter, info);ItemTouchHelper itemTouchHelper = new ItemTouchHelper(helper);//依赖在RecyclerView上itemTouchHelper.attachToRecyclerView(rv);

public class NewItemTouchHelper extends android.support.v7.widget.helper.ItemTouchHelper.Callback {    private CommonBaseAdapter adapter;    private List<UserMenusInfo> results;    private BaseActivity mActivity;    private final Vibrator mVibrator;    private final UserMenusDbUtil menusDbUtil;    public NewItemTouchHelper(BaseActivity activity, CommonBaseAdapter adapter, List<UserMenusInfo> list) {        super();        this.adapter = adapter;        this.results = list;        this.mActivity = activity;        mVibrator = (Vibrator) mActivity.getSystemService(Context.VIBRATOR_SERVICE);//震动        menusDbUtil = UserMenusDbUtil.getInstance();    }    @Override    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {        int dragFlags;//GridLayoutManager可拖动的方向分为上 下 左 右 LinearLayoutManager可拖动的方向分为上 下        int swipFlags;        if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {            dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;            swipFlags = 0;        } else {            dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;            swipFlags = 0;        }        return makeMovementFlags(dragFlags, swipFlags);    }    @Override    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {        int fromPosition = viewHolder.getAdapterPosition();//得到拖动ViewHolder的position        int toPosition = target.getAdapterPosition();//得到目标ViewHolder的position        if (fromPosition < toPosition) {            for (int i = fromPosition; i < toPosition; i++) {                Collections.swap(results, i, i + 1);            }        } else {            for (int i = fromPosition; i > toPosition; i--) {                Collections.swap(results, i, i - 1);            }        }        adapter.notifyItemMoved(fromPosition, toPosition);        return true;    }    @Override    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {    }    @Override    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {        if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {            mVibrator.vibrate(60);            viewHolder.itemView.setBackgroundColor(Color.LTGRAY);        }        super.onSelectedChanged(viewHolder, actionState);    }    @Override    public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {        viewHolder.itemView.setBackgroundColor(0);        super.clearView(recyclerView, viewHolder);    }}
阅读全文
0 0
原创粉丝点击