ItemTouchHelper 入门一
来源:互联网 发布:淘宝店铺索引怎么写 编辑:程序博客网 时间:2024/04/29 19:32
介绍
这货是一个工具类,为RecyclerView扩展滑动消失(删除)和drag & drop效果的。它需要和RecyclerView、Callback 一起工作。Callback 类里定义了 允许哪些交互,并且会接收到对应的交互事件根据你需要哪种功能(滑动消失(删除)和drag & drop),你需要重写Callback#onMove(RecyclerView, ViewHolder, ViewHolder)-----drag & dropCallback#onSwiped(ViewHolder, int) 方法。 -----滑动消失(删除)
用法
- 定义一个 Callback:ItemTouchHelper.Callback callback = new ItemTouchHelper.SimpleCallback(int,int)
这两个int分别代表要 监听哪几个方向上的拖拽、滑动事件。
常用:ItemTouchHelper.DOWN | ItemTouchHelper.UP | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT- 将Callback传给ItemTouchHelper:ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
- 关联ItemTouchHelper和RecyclerView:itemTouchHelper.attachToRecyclerView(mRv)
基本用法
// 拖拽方向int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;// 滑动支持的方向int swipeFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;//SimpleCallbackItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(dragFlags, swipeFlags) { /** * 在RecylerView OnDraw 回调 * 如果我们需要自定义 View的表现,重写它 是最佳的地方 * 默认改变 dx dy * @param c 在绘制每个 children 的 canvas * @param recyclerView attached to 的 RecyclerView * @param viewHolder 当前正在拖动的 ViewHolder * @param dX 正在拖动的 dx * @param dY 正在拖动的 dy * @param actionState 是哪种方式回调的 {@link #ACTION_STATE_DRAG} or {@link #ACTION_STATE_SWIPE}. * @param isCurrentlyActive 用户滑动为 true , 自动滑动 为 false(一般都是自动复位) */ public void onChildDraw(Canvas c, RecyclerView recyclerView, ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { sUICallback.onDraw(c, recyclerView, viewHolder.itemView, dX, dY, actionState, isCurrentlyActive); } /** * 当前阈值 默认0.5f */ @Override public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) { return super.getSwipeThreshold(viewHolder); } /** * ItemTouchHelper可以让你轻易得到一个事件的方向。 * 你需要重写getMovementFlags()方法来指定可以支持的拖放和滑动的方向。 * 使用helperItemTouchHelper.makeMovementFlags(int, int)来构造返回的flag。 * 这里我们启用了上下左右两种方向。注:上下为拖动(drag),左右为滑动(swipe)。 */ @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int dragFlags = setDragFlags(recyclerView); int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; //开启滑动删除// int swipeFlags = 0; //禁止滑动的一些操作 return makeMovementFlags(dragFlags, swipeFlags); } // 在Drag & Drop 会回调 @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { //交换数据 int from = viewHolder.getAdapterPosition(); int to = target.getAdapterPosition(); Collections.swap(mStringList,from,to); //动画 mSwipeAdapter.notifyItemMoved(from,to); return true; } /** * 滑动消失 Swipe Dismiss回调 * @param viewHolder item 绑定的ViewHolder * @param direction 方向 */ @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { //滑动删除 int adapterPosition = viewHolder.getAdapterPosition(); mStringList.remove(adapterPosition); mSwipeAdapter.notifyItemRemoved(adapterPosition); } /** * 默认情况下长按可拖动改变位置,如果想直接拖动某控件改变位置的话可以 * 先重写ItemTouchHelper的禁用长按拖动 * @return true 长按 false 随意拖动 */ public boolean isLongPressDragEnabled() { return false; }};//ItemTouchHelperItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);//绑定RecylerViewitemTouchHelper.attachToRecyclerView(mRecyclerView);
方法的介绍
onSwiped() 方法。是滑动删除动作已经发生后回调的。
即。我们先滑动布局 , 然后松手, 此时ItemTouchHelper 判断我们的手势是删除手势
会自动对这个布局执行丢出屏幕外动画,同时回调 onSwiped() 方法。
onMove()方法。一个Item移动到另外一个Item位置。需要改变时调用
阅读全文
0 0
- ItemTouchHelper 入门一
- RecycleView ItemTouchHelper 学习(一)
- ItemTouchHelper
- RecyclerView ItemTouchHelper
- ItemTouchHelper源码解析
- ItemTouchHelper实现短按拖拽
- ItemTouchHelper之SwipeDismiss
- RecyclerView爱恨情仇之ItemTouchHelper
- ItemTouchHelper的使用
- RecyclerView使用ItemTouchHelper
- 入门(一)
- android itemtouchhelper-extension 仿微信删除
- ItemTouchHelper实现拖拽笔刷效果-part1
- ItemTouchHelper源码分析(上)
- ItemTouchHelper源码分析(中)
- RecyclerView ItemTouchHelper源码分析扩展
- ItemTouchHelper实现部分响应拖动
- RecylerView中高级进阶ItemTouchHelper使用
- log4j 指定类输出到指定位置
- 浅析TCP/IP协议
- 还原二叉树(25 分)
- ListView中onItemClickListener点击失效
- java 保存和读取本地json文件
- ItemTouchHelper 入门一
- 电脑配置太低?使用这几个网站,你的电脑软件要少装一半!
- GO语言IO操作
- Java基本环境变量配置
- win10下安装netframework3.5失败的经验
- 定位大中型企业,F-One 通过复杂建模和高级分析助力企业决策
- ceph crush map 和 crushtool
- Restful 初识
- Linux网络编程10(1) -- TCP三次握手及四次挥手