短视频系统,长按侧滑实现删除的按钮

短视频系统,长按侧滑实现删除的按钮实现的相关代码

1,导包

1
implementation ‘com.android.support:recyclerview-v7:27.1.1

​2,Xml文件

 

1
<?xml version="1.0" encoding="utf-8"?><br><android.support.constraint.ConstraintLayout<br>xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"<br>android:layout_height="match_parent"><br><android.support.v7.widget.RecyclerView<br>    android:id="@+id/rv_linear_list"<br>    android:layout_width="match_parent"<br>    android:layout_height="match_parent"<br>    android:layout_marginTop="20dp"/><br></android.support.constraint.ConstraintLayout>

3,Activity

 

1
public class RvItemTouchActivity extends AppCompatActivity {<br>    private android.support.v7.widget.RecyclerView rvlinearlist;<br>    private ArrayList<String> mData;<br>    @Override<br>    protected void onCreate(@Nullable Bundle savedInstanceState) {<br>        super.onCreate(savedInstanceState);<br>        setContentView(R.layout.activity_linear);<br>        this.rvlinearlist = (RecyclerView) findViewById(R.id.rv_linear_list);<br>        initData();<br>        initAdapter();<br>    }<br>    private void initAdapter() {<br>        //线性布局拖拽<br>        rvlinearlist.setLayoutManager(new LinearLayoutManager(this));<br>        //自定义类实现拖拽,侧滑删除<br>        RvItemTouchAdapter adapter = new RvItemTouchAdapter(this, mData);<br>        new ItemTouchHelper(new MyItemTouchHandler(adapter)).attachToRecyclerView(rvlinearlist);<br>        rvlinearlist.setAdapter(adapter);<br>       /* //库实现<br>        RvItemTouchAdapter2 adapter2 = new RvItemTouchAdapter2(R.layout.item_rv_linear2, mData);<br>        rvlinearlist.setAdapter(adapter2);<br>        ItemDragAndSwipeCallback itemDragAndSwipeCallback = new ItemDragAndSwipeCallback(adapter2);<br>        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemDragAndSwipeCallback);<br>        itemTouchHelper.attachToRecyclerView(rvlinearlist);<br>// 开启拖拽<br>        adapter2.enableDragItem(itemTouchHelper);<br>        adapter2.setOnItemDragListener(onItemDragListener);<br>// 开启滑动删除<br>        adapter2.enableSwipeItem();<br>        adapter2.setOnItemSwipeListener(onItemSwipeListener);<br>*/<br>    }<br>    OnItemDragListener onItemDragListener = new OnItemDragListener() {<br>        @Override<br>        public void onItemDragStart(RecyclerView.ViewHolder viewHolder, int pos){}<br>        @Override<br>        public void onItemDragMoving(RecyclerView.ViewHolder source, int from, RecyclerView.ViewHolder target, int to) {<br>            //移动位置互换<br>            Collections.swap(mData,from,to);<br>        }<br>        @Override<br>        public void onItemDragEnd(RecyclerView.ViewHolder viewHolder, int pos) {}<br>    };<br>    OnItemSwipeListener onItemSwipeListener = new OnItemSwipeListener() {<br>        @Override<br>        public void onItemSwipeStart(RecyclerView.ViewHolder viewHolder, int pos) {<br>            Log.e("MMM", "onItemSwipeStart: "+pos );<br>        }<br>        @Override<br>        public void clearView(RecyclerView.ViewHolder viewHolder, int pos) {<br>            Log.e("MMM", "clearView: "+pos);<br>        }<br>        @Override<br>        public void onItemSwiped(RecyclerView.ViewHolder viewHolder, int pos) {<br>            Log.e("MMM", "onItemSwiped: "+pos);<br>        }<br>        @Override<br>        public void onItemSwipeMoving(Canvas canvas, RecyclerView.ViewHolder viewHolder, float dX, float dY, boolean isCurrentlyActive) {<br>            //正在滑动监听<br>        }<br>    };<br>    private void initData() {<br>        mData = new ArrayList<>();<br>        for (int i = 0; i < 10; i++) {<br>            mData.add("频道"+i);<br>        }<br>    }<br>}

4,Adapter

 

1
public class RvItemTouchAdapter extends MyItemTouchHandler.ItemTouchAdapterImpl {<br>    private final LayoutInflater mLayoutInflater;<br>    private Context mContext;<br>    private List<String>mData;<br>    public RvItemTouchAdapter(Context context, List<String> data) {<br>        mContext = context;<br>        mData = data;<br>        mLayoutInflater = LayoutInflater.from(context);<br>    }<br>    @Override<br>    public void onItemMove(int fromPosition, int toPosition) {<br>        //移动时交换位置<br>        Collections.swap(mData,fromPosition,toPosition);<br>    }<br>    @Override<br>    public void onItemRemove(int position) {<br>        //移除监听<br>        mData.remove(position);<br>    }<br>    @NonNull<br>    @Override<br>    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {<br>        View view = mLayoutInflater.inflate(R.layout.item_rv_linear2, parent, false);<br>        return new ViewHolder(view);<br>    }<br>    @Override<br>    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {<br>        if (holder instanceof ViewHolder) {<br>            ((ViewHolder) holder).tvTv.setText(mData.get(position));<br>        }<br>    }<br>    @Override<br>    public int getItemCount() {<br>        return mData.size();<br>    }<br>    class ViewHolder extends RecyclerView.ViewHolder {<br>        TextView tvTv;<br>        public ViewHolder(View itemView) {<br>            super(itemView);<br>            tvTv=itemView.findViewById(R.id.tv_item_rv_linear_text);<br>        }<br>    }<br>}

5,MyItemTouchHandler

 

1
public class MyItemTouchHandler extends ItemTouchHelper.Callback {<br>      ItemTouchAdapterImpl adapter;    <br>      public MyItemTouchHandler(@NonNull ItemTouchAdapterImpl adapter) {<br>          this.adapter = adapter;    <br>      }    <br>      /**     <br>       * 设置 允许拖拽和滑动删除的方向     <br>       */    <br>       @Override    <br>       public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {<br>          // 指定可 拖拽方向 和 滑动消失的方向        <br>          int dragFlags,swipeFlags;        <br>          RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();        <br>          if (manager instanceof GridLayoutManager || manager instanceof StaggeredGridLayoutManager) {<br>               // 上下左右都可以拖动            <br>               dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;       <br>           } else {            <br>              // 可以上下拖动            <br>              dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;        <br>           }        <br>           // 可以左右方向滑动消失        <br>           swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;        <br>           // 如果某个值传 0 , 表示不支持该功能        <br>           return makeMovementFlags(dragFlags, swipeFlags);    <br>        }    <br>        /**     <br>         * 拖拽后回调,一般通过接口暴露给adapter, 让adapter去处理数据的交换     <br>         */    <br>         @Override    <br>         public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {        <br>             // 相同 viewType 之间才能拖动交换        <br>             if (viewHolder.getItemViewType() == target.getItemViewType()) {            <br>                 int fromPosition = viewHolder.getAdapterPosition();<br>                 int toPosition = target.getAdapterPosition();<br>                 if (fromPosition < toPosition) {    <br>                    //途中所有的item位置都要移动    <br>                    for (int i = fromPosition; i < toPosition; i++) {        <br>                        adapter.onItemMove(i, i + 1);    <br>                    }<br>                  } else {    <br>                    for (int i = fromPosition; i > toPosition; i--) {        <br>                        adapter.onItemMove(i, i - 1);    <br>                    }<br>                  }<br>                  adapter.notifyItemMoved(fromPosition, toPosition);<br>                  return true;    <br>             }        <br>             return false;    <br>          }    <br>          /**     <br>           * 滑动删除后回调,一般通过接口暴露给adapter, 让adapter去删除该条数据     <br>           */    <br>           @Override    <br>           public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {        <br>              // 删除数据        <br>              adapter.onItemRemove(viewHolder.getAdapterPosition());        <br>              // adapter 刷新        <br>              adapter.notifyItemRemoved(viewHolder.getAdapterPosition());    <br>           }    <br>           @Override    <br>           public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {<br>               super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);       <br>               if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {            <br>                    //滑动时改变Item的透明度           <br>                    final float alpha = 1 - Math.abs(dX) / (float)viewHolder.itemView.getWidth();            <br>                    viewHolder.itemView.setAlpha(alpha);            <br>                    viewHolder.itemView.setTranslationX(dX);       <br>               }    <br>           }   <br>           /**     <br>            * item被选中(长按)     <br>            * 这里改变了 item的背景色, 也可以通过接口暴露, 让adapter去处理逻辑     <br>            */    <br>            @Override    <br>            public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {        <br>                if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {            <br>                   // 拖拽状态            <br>                   viewHolder.itemView.setBackgroundColor(Color.BLUE);<br>                }else if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {            <br>                   // 滑动删除状态            <br>                   viewHolder.itemView.setBackgroundColor(Color.RED);       <br>                }       <br>                super.onSelectedChanged(viewHolder, actionState);    <br>            }   <br>            /**     <br>             * item取消选中(取消长按)     <br>             * 这里改变了 item的背景色, 也可以通过接口暴露, 让adapter去处理逻辑     <br>             */    <br>             @Override    <br>             public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {        <br>                viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT);        <br>                super.clearView(recyclerView, viewHolder);    <br>             }    <br>             /**     <br>              * 是否支持长按开始拖拽,默认开启     * 可以不开启,然后在长按 item 的时候,手动 调用 mItemTouchHelper.startDrag(myHolder) 开启,更加灵活     <br>              */    <br>              @Override    <br>              public boolean isLongPressDragEnabled() {        <br>                 return adapter.autoOpenDrag();    <br>              }    <br>              /**     <br>               * 是否支持滑动删除,默认开启     * 可以不开启,然后在长按 item 的时候,手动 调用 mItemTouchHelper.startSwipe(myHolder) 开启,更加灵活     <br>               */    <br>               @Override    <br>               public boolean isItemViewSwipeEnabled() {        <br>                    return adapter.autoOpenSwipe();    <br>               }    <br>               // 建议让 adapter 实现该接口    <br>               public static abstract class ItemTouchAdapterImpl extends RecyclerView.Adapter{        <br>                    public abstract void onItemMove(int fromPosition, int toPosition);       <br>                    public abstract void onItemRemove(int position);       <br>                    // 是否自动开启拖拽        <br>                    protected boolean autoOpenDrag(){            <br>                         return true;       <br>                    }        <br>                    // 是否自动开启滑动删除        <br>                    protected boolean autoOpenSwipe(){            <br>                         return true;        <br>                    }    <br>               }<br>    }

 

以上就是短视频系统,长按侧滑实现删除的按钮实现的相关代码, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示