package com.anthony.library.widgets.subscribeview; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.support.v7.widget.helper.ItemTouchHelper; /** * ItemDragHelperCallback * Created by YoKeyword on 15/12/29. */ public class ItemDragHelperCallback extends ItemTouchHelper.Callback { @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int dragFlags; RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); if (manager instanceof GridLayoutManager || manager instanceof StaggeredGridLayoutManager) { dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; } else { dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; } // 如果想支持滑动(删除)操作, swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END int swipeFlags = 0; return makeMovementFlags(dragFlags, swipeFlags); } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { // 固定栏目不能移动 if(target instanceof ChannelAdapter.MyViewHolder) { if(((ChannelAdapter.MyViewHolder) target).isFix) { return false; } } if(viewHolder instanceof ChannelAdapter.MyViewHolder) { if(((ChannelAdapter.MyViewHolder) viewHolder).isFix) { return false; } } // 不同Type之间不可移动 if (viewHolder.getItemViewType() != target.getItemViewType()) { return false; } if (recyclerView.getAdapter() instanceof OnItemMoveListener) { OnItemMoveListener listener = ((OnItemMoveListener) recyclerView.getAdapter()); listener.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); } 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) { if (viewHolder instanceof OnDragVHListener) { OnDragVHListener itemViewHolder = (OnDragVHListener) viewHolder; itemViewHolder.onItemSelected(); } } super.onSelectedChanged(viewHolder, actionState); } @Override public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { if (viewHolder instanceof OnDragVHListener) { OnDragVHListener itemViewHolder = (OnDragVHListener) viewHolder; itemViewHolder.onItemFinish(); } super.clearView(recyclerView, viewHolder); } @Override public boolean isLongPressDragEnabled() { // 不支持长按拖拽功能 手动控制 return false; } @Override public boolean isItemViewSwipeEnabled() { // 不支持滑动功能 return false; } }