文章目录 一、ItemTouchHelper 简介 二、RecyclerView 相关资料 一、ItemTouchHelper 简介 ---- 官方文档 : https://developer.android.google.cn.../reference/kotlin/androidx/recyclerview/widget/ItemTouchHelper ItemTouchHelper 可以为 RecyclerView 添加 滑动删除效果...和 拖动效果 ; ItemTouchHelper 需要与 RecyclerView 和 ItemTouchHelper.Callback 结合起来使用 ; 根据想要开发的功能 , 重写不同的方法 ;...Is either {@link * #ACTION_STATE_DRAG} or {@link #ACTION_STATE_SWIPE...Is either {@link * #ACTION_STATE_DRAG} or {@link #ACTION_STATE_SWIPE
系列文章目录 一、ItemTouchHelper 事件分发源码分析入口 二、ItemTouchHelper 绑定 RecyclerView 源码分析 1、ItemTouchHelper.attachToRecyclerView...方法分析 2、ItemTouchHelper.setupCallbacks 方法分析 3、RecyclerView.ItemDecoration 源码分析 三、博客资源 一、ItemTouchHelper...事件分发源码分析入口 ---- ItemTouchHelper 使用时 , 是为 ItemTouchHelper 设置一个 RecyclerView 列表 , 不是给 RecyclerView 设置一个...= resources .getDimension(R.dimen.item_touch_helper_swipe_escape_velocity);...mMaxSwipeVelocity = resources .getDimension(R.dimen.item_touch_helper_swipe_escape_max_velocity
1、效果 2、简介 本文主角是ItemTouchHelper。 它是RecyclerView对于item交互处理的一个「辅助类」,主要用于拖拽以及滑动处理。...super.onSelectedChanged(viewHolder, actionState) } actionState: ACTION_STATE_IDLE 空闲状态 ACTION_STATE_SWIPE...ItemTouchHelper,然后调用其attachToRecyclerView方法绑定到RecyclerView。...= resources.getDimension(R.dimen.item_touch_helper_swipe_escape_velocity); mMaxSwipeVelocity...= resources.getDimension(R.dimen.item_touch_helper_swipe_escape_max_velocity); setupCallbacks
ItemTouchHelper用法: // COMPLETED (3) Create a new ItemTouchHelper with a SimpleCallback that handles...both LEFT and RIGHT swipe directions // Create an item touch helper to handle swiping items...off the list new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT |...@Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder...viewHolder, RecyclerView.ViewHolder target) { //do nothing, we only care about swiping
1、效果2、简介本文主角是ItemTouchHelper。它是RecyclerView对于item交互处理的一个「辅助类」,主要用于拖拽以及滑动处理。...super.onSelectedChanged(viewHolder, actionState) }复制代码actionState:ACTION_STATE_IDLE 空闲状态ACTION_STATE_SWIPE...ItemTouchHelper,然后调用其attachToRecyclerView方法绑定到RecyclerView。...= resources.getDimension(R.dimen.item_touch_helper_swipe_escape_velocity); mMaxSwipeVelocity...= resources.getDimension(R.dimen.item_touch_helper_swipe_escape_max_velocity); setupCallbacks
上次分析源码,我们知道,ItemTouchHelper对被选中的ViewHodler进行动画操作都是通过ItemTouchUIUtilImpl这个类,我们想要实现侧滑删除,必定需要对ViewHodler...进行平移操作,ItemTouchHelper.Callback通过onChildDraw方法调用了ItemTouchUIUtilImpl中的方法,所以我们改写onChildDraw方法 @Override...public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder...recyclerview.gif 但是,我们的item并不能获取点击事件,因为ItemTouchHelper并没有把事件传递给子控件,解决方法:把ItemTouchHelper复制到自己的项目中!...= mDy = 0f; mActivePointerId = motionEvent.getPointerId(0); select(vh, ACTION_STATE_SWIPE
拖动距离判定 | 设置拖动触发操作 ) 【Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView ) 【Android 事件分发】ItemTouchHelper...( 绑定 RecyclerView ) 分析了 ItemTouchHelper 添加时 , 调用了 mItemTouchHelper.attachToRecyclerView(recycler_view...) 方法 , 将 ItemTouchHelper 与 RecyclerView 进行关联 , 并在 attachToRecyclerView 方法的最后 , 调用了 setupCallbacks 方法...条目中的装饰 , 可以在条目组件 底部 上层 绘制 Canvas 图形 // ItemTouchHelper 继承 RecyclerView.ItemDecoration...涉及到的本博客相关源码 ---- public class ItemTouchHelper extends RecyclerView.ItemDecoration implements
对于 ItemTouchHelper.Callback 而言,需要在 getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder...= ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; } return makeMovementFlags(dragFlags, swipeFlags..., isCurrentlyActive); View itemView = viewHolder.itemView; if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE...(viewHolder); } 现在我们加上动画后,来看看效果: 3.gif swipe效果图 发现还是有问题,第一层的卡片滑出去之后第二层的就莫名其妙地偏了。...recyclerView, viewHolder); viewHolder.itemView.setRotation(0f); } 大功告成,我们试一下效果: 4.gif swipe效果图 Perfect
对于 ItemTouchHelper 来处理 Item View 的触摸滑动事件相必都不陌生吧,如果对这方面不太了解的同学可以看一下我之前的博客:《RecyclerView实现拖拽排序和侧滑删除》。...对于 ItemTouchHelper.Callback 而言,需要在 getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder...= ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; } return makeMovementFlags(dragFlags, swipeFlags..., isCurrentlyActive); View itemView = viewHolder.itemView; if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE...recyclerView, viewHolder); viewHolder.itemView.setRotation(0f); } 大功告成,我们试一下效果: swipe效果图 Perfect
the ItemTouchHelper to the provided RecyclerView....= resources .getDimension(R.dimen.item_touch_helper_swipe_escape_velocity);...mMaxSwipeVelocity = resources .getDimension(R.dimen.item_touch_helper_swipe_escape_max_velocity...继承ItemDecoration干了什么,发现ItemTouchHelper改写了onDraw和onDrawOver方法 /** * 该方法在recyclerView的draw方法中调用...= ItemTouchHelper.ACTION_STATE_DRAG) { draw(c, recyclerView, view, dX, dY);
简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 ) 【Android 事件分发】ItemTouchHelper 实现侧滑删除 ( 设置滑动方向 | 启用滑动操作...拖动距离判定 | 设置拖动触发操作 ) 【Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView ) 【Android 事件分发】ItemTouchHelper...涉及到的本博客相关源码 ---- public class ItemTouchHelper extends RecyclerView.ItemDecoration implements...* 为动画选择 item 项 * 该方法中进行一系列的计算 * * @param selected The ViewHolder to drag or swipe...if (swipeDir <= 0) { // this is a drag or failed swipe
:recyclerview-v7:26.1.0' 2、实现布局 首先,在drawable文件夹下新建tv_bg.xml文件作为样式文件。...5、ItemTouchHelper 还记得上面我所说的一个类吗?...ItemTouchHelper对,没错就是这个,根据官方说明如下: /** * This is a utility class to add swipe to dismiss and drag & drop...support to RecyclerView...是一个工具类,为RecyclerView提供拖拽、滑动的支持。
上下拖动时与其他item进行位置交换 ItemTouchHelper.Callback本身不具备将两个item互换位置的功能,但RecyclerView可以,我们可以在item拖动的时候把当前item与另一个...| ItemTouchHelper.RIGHT | ItemTouchHelper.UP | ItemTouchHelper.DOWN;..., viewHolder, dX, dY, actionState, isCurrentlyActive); if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE...item 的各种状态 ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback); try{ //关联recyclerView...,一个helper对象只能对应一个recyclerView itemTouchHelper.attachToRecyclerView(recyclerView); }catch (Exception
RecyclerView拖拽滑动需要使用到ItemTouchHelper.SimpleCallback public class SlideCardStackCallBack2 extends ItemTouchHelper.SimpleCallback.../** * Up direction, used for swipe & drag control. */ public static final int UP = 1;...//1 /** * Down direction, used for swipe & drag control. */ public static final...static final int LEFT = 1 << 2; //4 /** * Right direction, used for swipe & drag control....= ItemTouchHelper(slideCardStackCallBack) // 绑定拖拽 itemTouchHelper.attachToRecyclerView
| ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; swipeFlags = 0; } return...recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { Log.e...闲置状态 * ItemTouchHelper.ACTION_STATE_SWIPE 滑动中状态 * ItemTouchHelper#ACTION_STATE_DRAG 拖拽中状态 */ @Override...recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { super.clearView(recyclerView...方法 ItemTouchHelper.Callback callback = new RecycleItemTouchHelper(mPhotoAdapter); ItemTouchHelper itemTouchHelper
好了,第一步终于完成啦,下面就是RecyclerView的touch相关代码控制了,关于touch的控制,我们需要接触到android.support.v7.widget.helper.ItemTouchHelper.Callback...这里定义了一个实现类ChuShouCallBack,CallBack抽象类定义了只是定义了我们的Drag(拖拽)动作,实际上我们要用的是SimpleCallback子类,该类实现了我们的Swipe(滑动...因此这里需要屏蔽Drag动作,实现Swipe动作。 屏蔽Drag动作,实现Swipe动作: ? 下面看看RecyclerView滑动Item的监听 ? ? ?...关于外层的RecyclerView滑动处理就先说这么多,下面来介绍如何处理内层带有滑动结构的RecyclerView,两个都有滑动结构,何时才让内层的RecyclerView,何时让外层的RecyclerView...RecyclerView滑动;当item滑动到底部时,若再继续往上滑打开外层RecyclerView滑动,若再继续往下滑禁掉外层RecyclerView滑动。
创建 ItemTouchHelper 创建一个 ItemTouchHelper 对象,然后其调用 attachToRecyclerView 方法: RecyclerView recyclerView =...helper = new ItemTouchHelper(new MyItemTouchCallback(adapter)); helper.attachToRecyclerView(recyclerView...); 在创建 ItemTouchHelper 对象时候,需要我们传入一个实现了 ItemTouchHelper.Callback 接口的对象。...实现 ItemTouchHelper.Callback 接口 创建 MyItemTouchCallback 类,实现 ItemTouchHelper.Callback 接口: public class...dragFlag = ItemTouchHelper.DOWN | ItemTouchHelper.UP; swipeFlag = ItemTouchHelper.END
以下是RecyclerView结合ItemTouchHelper实现的列表和网格布局的拖拽效果。...我们只需要实例化一个ItemTouchHelper,然后关联到RecyclerView就OK了: itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback...()); itemTouchHelper.attachToRecyclerView(recyclerView); 构造方法中需要一个ItemTouchHelper.Callback,ItemTouchHelper...自定义一个类继承实现ItemTouchHelper.Callback接口,需要实现以下方法: @Override public int getMovementFlags(RecyclerView...dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT
onItemMove(fromPosition: Int, toPosition: Int) } 然后我们的Adapter里面要实现这个接口 import androidx.recyclerview.widget.RecyclerView...: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int { //这里是水平拖动 val dragFlags = ItemTouchHelper.LEFT...(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean...or ItemTouchHelper.RIGHT 如果是竖直方向上拖动,则是用 ItemTouchHelper.UP or ItemTouchHelper.DOWN 最后绑定到我们的RecycleView...= ItemTouchHelper(callback) touchHelper.attachToRecyclerView(recyclerView) 完成以上的步骤就瞬间实现了让RecycleView
简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 ) 【Android 事件分发】ItemTouchHelper 实现侧滑删除 ( 设置滑动方向 | 启用滑动操作...) 2、启用长按拖动功能 3、拖动距离判定设置 4、设置拖动排序触发操作 5、RecyclerView.Adapter 适配器中的交换排序操作 三、完整代码实现 1、主界面 2、ItemTouchHelper.Callback...的 getMovementFlags 方法 , 在该方法中设置滑动/拖动标志位 ; 滑动 / 拖动 标志 , 可使用 ItemTouchHelper.UP , ItemTouchHelper.DOWN...; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager...androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; public
领取专属 10元无门槛券
手把手带您无忧上云