创建两个工具类
public abstract class OnRecyclerItemClickListener implements RecyclerView.OnItemTouchListener { private GestureDetectorCompat mGestureDetector; private RecyclerView recyclerView; public OnRecyclerItemClickListener(RecyclerView recyclerView) { this.recyclerView = recyclerView; mGestureDetector = new GestureDetectorCompat(recyclerView.getContext(), new ItemTouchHelperGestureListener()); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { mGestureDetector.onTouchEvent(e); return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { mGestureDetector.onTouchEvent(e); } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onSingleTapUp(MotionEvent e) { View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (child != null) { RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child); onItemClick(vh); } return true; } @Override public void onLongPress(MotionEvent e) { View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (child != null) { RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child); onItemLongClick(vh); } } } public abstract void onItemClick(RecyclerView.ViewHolder vh); public abstract void onItemLongClick(RecyclerView.ViewHolder vh); }
第二个
public class SpaceItemDecoration extends RecyclerView.ItemDecoration { int mSpace; @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); outRect.left = mSpace; outRect.right = mSpace; outRect.bottom = mSpace; if (parent.getChildAdapterPosition(view) == 0) { outRect.top = mSpace; } } public SpaceItemDecoration(int space) { this.mSpace = space; } }
在UI界面中
private void initdrag2(RecyclerView recyclerView_addtow, final MyaddOneRecyAdpTow myaddOneRecyAdpTow) { recyclerView_addtow.addOnItemTouchListener(new OnRecyclerItemClickListener(recyclerView_addtow) { @Override public void onItemClick(RecyclerView.ViewHolder vh) { Toast.makeText(getContext(), "adadsadas", Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(RecyclerView.ViewHolder vh) { if (vh.getLayoutPosition() != 0 && vh.getLayoutPosition() != 1) { mItemTouchHelper.startDrag(vh); //获取系统震动服务 Vibrator vib = (Vibrator) getActivity().getSystemService(Service.VIBRATOR_SERVICE);//震动70毫秒 vib.vibrate(70); } } }); mItemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; final int swipeFlags = 0; return makeMovementFlags(dragFlags, swipeFlags); } else { final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; final int swipeFlags = 0; // final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); } } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { //得到当拖拽的viewHolder的Position int fromPosition = viewHolder.getAdapterPosition(); //拿到当前拖拽到的item的viewHolder int toPosition = target.getAdapterPosition(); if (fromPosition < toPosition) { for (int i = fromPosition; i < toPosition; i++) { // Collections.swap(alllist, i, i + 1); } } else { for (int i = fromPosition; i > toPosition; i--) { // Collections.swap(alllist, i, i - 1); } } myaddOneRecyAdpTow.notifyItemMoved(fromPosition, toPosition); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { } @Override public boolean isLongPressDragEnabled() { return false; } @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { viewHolder.itemView.setBackgroundColor(Color.LTGRAY); } super.onSelectedChanged(viewHolder, actionState); } @Override public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { super.clearView(recyclerView, viewHolder); viewHolder.itemView.setBackgroundColor(0); } }); mItemTouchHelper.attachToRecyclerView(recyclerView_addtow); }
如果是两个recyclerview想要实现托拉拽的话 把initdrag方法写两遍就行了