仿QQ左滑删除SwipeMenuRecyclerView

compile 'com.yanzhenjie:recyclerview-swipe:1.1.4'

https://github.com/yanzhenjie/SwipeRecyclerView

1,setAdapter  一定要放在最后

 mHistoryAdapter = new TodayAdapter(getActivity(),data);

        mSwipeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        mSwipeRecyclerView.addItemDecoration(new DefaultItemDecoration(Color.RED));

        //  设置侧滑
        // 设置监听器。
        mSwipeRecyclerView.setSwipeMenuCreator(mSwipeMenuCreator);
        mSwipeRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener);

        mSwipeRecyclerView.setAdapter(mHistoryAdapter);


2,

  /**
     * 创建菜单
     */
    private SwipeMenuCreator mSwipeMenuCreator = new SwipeMenuCreator() {
        @Override
        public void onCreateMenu(SwipeMenu leftMenu, SwipeMenu rightMenu, int viewType) {
            int width = getResources().getDimensionPixelSize(R.dimen.dp_70);

            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            SwipeMenuItem deleteItem = new SwipeMenuItem(getActivity())
                    .setBackground(R.drawable.selector_purple)
                    .setImage(R.mipmap.ic_action_close)
                    .setWidth(width)
                    .setHeight(height);
            // 各种文字和图标属性设置。
            rightMenu.addMenuItem(deleteItem); // 在Item右侧添加一个菜单。

            SwipeMenuItem completeItem = new SwipeMenuItem(getActivity())
                    .setBackground(R.drawable.swipe_menu_shap)
                    .setText("完成")
                    .setTextColor(Color.WHITE)
                    .setWidth(width)
                    .setHeight(height);
            rightMenu.addMenuItem(completeItem); // 添加菜单到右侧。

            SwipeMenuItem modifyItem = new SwipeMenuItem(getActivity())
                    .setBackground(R.drawable.swipe_menu_shap)
                    .setText("修改")
                    .setTextColor(Color.WHITE)
                    .setWidth(width)
                    .setHeight(height);
            rightMenu.addMenuItem(modifyItem); // 添加菜单到右侧。

            SwipeMenuItem deleteItem = new SwipeMenuItem(getActivity())
                    .setBackground(R.drawable.swipe_menu_shap)
                    .setText("删除")
                    .setTextColor(Color.WHITE)
                    .setWidth(width)
                    .setHeight(height);
            rightMenu.addMenuItem(deleteItem); // 添加菜单到右侧。

        }
    };
    /**
     * 菜单点击监听。
     */
    private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() {
        @Override
        public void onItemClick(SwipeMenuBridge menuBridge) {
            // 任何操作必须先关闭菜单,否则可能出现Item菜单打开状态错乱。
            menuBridge.closeMenu();
            toast("history");

            int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。
            int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。
            int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。

            switch (menuPosition){
                case 0 :
                    //  删除

              
                    break;
            }
        }
    };

3, adapter

package com.vily.noteplatform.adapt;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.vily.noteplatform.R;

/**
 * description :
 * Author : Vily
 * Date : 2018/02/06
 * Time : 15:25
 */

public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.HistoryViewHolder> {

    static final int VIEW_TYPE_NON_STICKY = R.layout.item_menu_main;

    private Context mContext;
    private LayoutInflater mInflater;


    public HistoryAdapter(Context context) {
        this.mContext=context;
        mInflater=LayoutInflater.from(context);

    }

    @Override
    public HistoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.history_item, parent, false);
        return new HistoryViewHolder(view);
    }

    @Override
    public void onBindViewHolder(HistoryViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 3;
    }


    class HistoryViewHolder extends RecyclerView.ViewHolder{

        public HistoryViewHolder(View itemView) {
            super(itemView);
        }
    }


}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 Android 仿QQ左滑显示删除按钮的方法是使用 RecyclerView 的 ItemTouchHelper 类,它提供了拖动和滑动 Item 的处理逻辑。具体实现步骤如下: 1. 在 RecyclerView 的 adapter 中,实现 ItemTouchHelper.Callback 接口,该接口中有三个方法:onMove()、onSwiped() 和 getMovementFlags()。 2. 在 getMovementFlags() 方法中,设置支持的滑动方向为左滑。 3. 在 onSwiped() 方法中,处理滑动事件,比如删除 Item。 4. 在 Item 的 ViewHolder 中,添加一个删除按钮,并设置其可见性为不可见。 5. 在 ItemTouchHelper.Callback 的 onChildDraw() 方法中,处理左滑时的视觉效果,比如将删除按钮设置为可见,实现左滑删除的效果。 6. 在 RecyclerView 的 ItemDecoration 中,设置左滑时的背景颜色和阴影效果,使左滑效果更加美观。 代码示例: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements ItemTouchHelper.Callback { private List<String> mData; @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int swipeFlags = ItemTouchHelper.LEFT; return makeMovementFlags(0, swipeFlags); } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { // 拖动事件 return false; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { // 左滑事件 int position = viewHolder.getAdapterPosition(); mData.remove(position); notifyItemRemoved(position); } @Override public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { // 滑动时的视觉效果 if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { View itemView = viewHolder.itemView; int buttonWidth = itemView.getHeight(); Paint paint = new Paint(); paint.setColor(Color.parseColor("#D32F2F")); RectF background = new RectF(itemView.getRight() + dX, itemView.getTop(), itemView.getRight(), itemView.getBottom()); c.drawRect(background, paint); Drawable icon = ContextCompat.getDrawable(mContext, R.drawable.delete_icon); int intrinsicWidth = icon.getIntrinsicWidth(); int intrinsicHeight = icon.getIntrinsicHeight(); int iconTop = itemView.getTop() + (itemView.getHeight() - intrinsicHeight) / 2; int iconMargin = (itemView.getHeight() - intrinsicHeight) / 2; int iconLeft = itemView.getRight() - iconMargin - intrinsicWidth; int iconRight = itemView.getRight() - iconMargin; int iconBottom = iconTop + intrinsicHeight; icon.setBounds(iconLeft, iconTop, iconRight, iconBottom); icon.draw(c); } super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); } static class ViewHolder extends RecyclerView.ViewHolder { Button mDeleteButton; public ViewHolder(View itemView) { super(itemView); mDeleteButton = itemView.findViewById(R.id.delete_button); mDeleteButton.setVisibility(View.GONE); } } } ``` 以上是一个简单的实现 Android 仿QQ左滑显示删除按钮的示例代码,可以根据实际需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值