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
- RecyclerView长按拖动效果,用ItemTouchHelper实现
- RecyclerView的item拖动排序效果实现和它的ItemTouchHelper详解
- RecyclerView借助ItemTouchHelper实现拖动和滑动删除功能
- Android使用ItemTouchHelper实现RecyclerView的item拖动位置交换
- ItemTouchHelper实现RecyclerView拖动排序和滑动删除
- 使用ItemTouchHelper和RecyclerView实现拖拽移动效果
- RecyclerView的Item点击事件,增加删除Item瀑布流动画效果,长按拖动Item,RecyclerView复杂布局、实现新闻频道选择器
- ItemTouchHelper实现部分响应拖动
- ItemTouchHelper实现拖拽笔刷效果-part1
- RecyclerView ItemTouchHelper
- RecyclerView之ItemTouchHelper仿今日头条频道管理拖动
- Android进阶七:RecyclerView拖动滑动之ItemTouchHelper
- Android ItemTouchHelper实现RecyclerView交互动画
- RecyclerView之使用ItemTouchHelper实现交互动画
- RecyclerView+ItemTouchHelper实现拖拽滑动
- Android实现GridView的item长按拖动删除完美实现(带动画效果)
- Android实现GridView的item长按拖动删除完美实现(带动画效果)
- RecyclerView的侧滑删除和长按拖动
- 2017.11.8考试总结
- sass/compass安装
- 普元EOS中namingsql(命名sql)动态传入表名造成的SQL注入的解决方案
- 最好的前端hacking备忘录集锦 2017-11-07 京程一灯 记住所有API几乎是不可能的,这时候你需要一份备忘录!下面是我收集的最棒的前端备忘录。 Javascript ES2015 特
- elasticsearch安装部署
- RecyclerView长按拖动效果,用ItemTouchHelper实现
- python--n位数删除k位得到最小数
- Java 多线程编程
- 笔记
- 进程外COM组件实现IRpcChannelBuffer接口,客户端通过代理接口跨进程调用(有代码)
- 浏览器关闭 session并不会被干掉
- Python数据处理(整理更新中...)
- retrofit+Rxjava
- 每个年轻设计师都需要知道的10件事