【RecyclerView】 十五、使用 ItemTouchHelper 实现 RecyclerView 拖动排序 ( ItemTouchHelper 简介 )

文章目录

一、ItemTouchHelper 简介

二、RecyclerView 相关资料

一、ItemTouchHelper 简介

官方文档 : https://developer.android.go开发者大会ogle.cn/reference/kotl开发者选项在哪in/andr开发者大会oidx/recyclerview/widget/android开发ItemTouchHelper

ItemTouchHelper 可以为 RecyclerView 添加 滑动删除效android开发工具果 和 拖动效果 ;

ItemTouchHelper 需要与 RecyclerView 和 ItemTouchHelper.Callback 结合起来使用 ;

根据想要开发的功能 , 重写不同的方法 ;

如果是想要开发拖动效果相关的开发者功能 ,android开发app 重写 ItemTouchHelper.Callback 的 onMoved 方法 ;

public abstract boolean onMove(@NonNull RecyclerView recyclerView,
                @NonNull ViewHolder viewHolder, @NonNull ViewHolder target);

如果想要开发滑动相关效果 , 重android开发框架写 ItemTouchHelper.Callback 的 onSwiped 方法 ;

public abstract void onSwiped(@NonNull ViewHolder viewHolder, int direction);

ItemTouchHelper 需要与 LayoutManager 布局管理器结合使kotlin为什么流行不起来用 ;

通过 继承 ItemTouchHelper.Cakotlin怎么读llback 抽象类 , 或

实现 ItemTandroid开发ouchHelper.Callback 接口 ,

这两个操作 自定义 LayoutManager 布局管理器 , 可以达到最优化的效开发者模式有什么用果 ;开发者选项开启好还是关闭好

看一下 Android 官方定义的 线性布局管理器 LinearLayoutManager , 就实开发者模式怎么关闭现了 ItemTouchHelper.ViewDropHandler 接口 ;

public class LinearLayoutManager extends RecyclerView.LayoutManager implements
        ItemTouchHelper.ViewDropHandler, RecyclerView.SmoothScroller.ScrollVectorProvider {
}

默认情况开发者选项在哪下 , ItemTouchHelper 移动 item 组件的 translateX 或 translateY 属性 , 为其重android开发工程师需要学什么新设置位置 ;

开发者可以自定义这些行为通过覆盖 ItemTouchHelper.Callback 的 onChildDraw 和 onChildDr开发者大会awOver 方法 ;

大多数情况下只需要覆盖 onChildDraw 方法即可 ;

onChildDraw 方android开发工程师需要学什么法原型 :

public class ItemTouchHelper extends RecyclerView.ItemDecoration
        implements RecyclerView.OnChildAttachStateChangeListener {
    public abstract static class Callback {
        /**
         * Called by ItemTouchHelper on RecyclerView's onDraw callback.
         * <p>
         * If you would like to customize how your View's respond to user interactions, this is
         * a good place to override.
         * <p>
         * Default implementation translates the child by the given <code>dX</code>,
         * <code>dY</code>.
         * ItemTouchHelper also takes care of drawing the child after other children if it is being
         * dragged. This is done using child re-ordering mechanism. On platforms prior to L, this
         * is
         * achieved via {@link android.view.ViewGroup#getChildDrawingOrder(int, int)} and on L
         * and after, it changes View's elevation value to be greater than all other children.)
         *
         * @param c                 The canvas which RecyclerView is drawing its children
         * @param recyclerView      The RecyclerView to which ItemTouchHelper is attached to
         * @param viewHolder        The ViewHolder which is being interacted by the User or it was
         *                          interacted and simply animating to its original position
         * @param dX                The amount of horizontal displacement caused by user's action
         * @param dY                The amount of vertical displacement caused by user's action
         * @param actionState       The type of interaction on the View. Is either {@link
         *                          #ACTION_STATE_DRAG} or {@link #ACTION_STATE_SWIPE}.
         * @param isCurrentlyActive True if this view is currently being controlled by the user or
         *                          false it is simply animating back to its original state.
         * @see #onChildDrawOver(Canvas, RecyclerView, ViewHolder, float, float, int,
         * boolean)
         */
        public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
                @NonNull ViewHolder viewHolder,
                float dX, float dY, int actionState, boolean isCurrentlyActive) {
            ItemTouchUIUtilImpl.INSTANCE.onDraw(c, recyclerView, viewHolder.itemView, dX, dY,
                    actionState, isCurrentlyActive);
        }
    }
}

onChildDrawkotlinOver 方法原型 :

public class ItemTouchHelper extends RecyclerView.ItemDecoration
        implements RecyclerView.OnChildAttachStateChangeListener {
    public abstract static class Callback {
        /**
         * Called by ItemTouchHelper on RecyclerView's onDraw callback.
         * <p>
         * If you would like to customize how your View's respond to user interactions, this is
         * a good place to override.
         * <p>
         * Default implementation translates the child by the given <code>dX</code>,
         * <code>dY</code>.
         * ItemTouchHelper also takes care of drawing the child after other children if it is being
         * dragged. This is done using child re-ordering mechanism. On platforms prior to L, this
         * is
         * achieved via {@link android.view.ViewGroup#getChildDrawingOrder(int, int)} and on L
         * and after, it changes View's elevation value to be greater than all other children.)
         *
         * @param c                 The canvas which RecyclerView is drawing its children
         * @param recyclerView      The RecyclerView to which ItemTouchHelper is attached to
         * @param viewHolder        The ViewHolder which is being interacted by the User or it was
         *                          interacted and simply animating to its original position
         * @param dX                The amount of horizontal displacement caused by user's action
         * @param dY                The amount of vertical displacement caused by user's action
         * @param actionState       The type of interaction on the View. Is either {@link
         *                          #ACTION_STATE_DRAG} or {@link #ACTION_STATE_SWIPE}.
         * @param isCurrentlyActive True if this view is currently being controlled by the user or
         *                          false it is simply animating back to its original state.
         * @see #onChildDrawOver(Canvas, RecyclerView, ViewHolder, float, float, int,
         * boolean)
         */
        public void onChildDrawOver(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
                ViewHolder viewHolder,
                float dX, float dY, int actionState, boolean isCurrentlyActive) {
            ItemTouchUIUtilImpl.INSTANCE.onDrawOver(c, recyclerView, viewHolder.itemView, dX, dY,
                    actionState, isCurrentlyActive);
        }
    }
}

二、RecyclerV开发者模式有什么危害iew 相关资料

官方文档 :

使用 RecyclerView 创kotlin现在不火了建动态列表 : https://develandroid开发教程oper.androi开发者d.google.cn/guide/topics/ui/layout/recyclerview

高级 RecyclerView 自定义 : https://developer.android.google.开发者模式怎么关闭cn/guide/topics/ui/layout/re开发者模式有什么危害cyclerview-custom

RecyclerView 官方文档 : https://developer.andrandroid开发工程师需要学什么oid.google.cn/reference/androidx/recyclerview/widget/Rec开发者模式怎么关闭yclerView

RecyclerView.Adapter 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/kotlin语言RecyclerViewandroid开发框架.Adapter

RecyclerView.开发者ViewHo开发者选项开启好还是关闭好lder 官方文档开发者模式打开好还是关闭好 : https://developer.an开发者选项怎么设置最流畅droid.google.cn/refereandroid开发nce/androiandroid开发中用的数据库是dx/recyclervie开发者大会w/widget/RecyclerView.ViewHolder

RecyclerView.ItemDecoration 官方文档 : https://android开发中用的数据库是devel开发者选项开启好还是关闭好oper.an开发者模式有什么用droid.google.cnandroid开发app/reference/androidx/recyclerview/widget/Recyckotlin怎么读lerViewandroid开发app.ItemDecoration

GridLayoutManager 官方文档 : https://developer.android.google.cn/reference/androidx/recyclkotlin怎么读erview/widget/GridLayoutManager

LinearLaykotlin下载outManager 官方文档 : https://developer.android.google.cn/reandroid开发工程师ference/开发者选项在哪androidxkotlin/recyclerview/widget/LinearLayoutManager

StaggeredGridLayoutManager 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/w开发者模式打开好还是关闭好idget/Staggeandroid开发中用的数据库是redGridLayoutManager

ItemTouchHelpandroid开发框架er 官方文开发者选项打开有害吗档 :开发者模式有什么危害 https://devekotlinloper.android.google.cn/referkotlinence/kotlin/androidx/recyclerview/widget/Item开发者选项开启好还是关闭好TouchHelper

ItemTouchHelper.Callback 官方文档 : httpandroid开发框架s://developer.android.google.cn/reference/kotlin/androidx/recyclerview/widget/ItemTouchHelper.Callback

代码示例 :

GitHuandroid开发工具箱b 源码地址 : https://github.com/han1202012/001_RecyclerView

博客源码快照 : https://d开发者大会ownload.csdn.net/download/han1202012/14984775

( 使用 Android Studio 打开 )