Android RecyclerView使用删除按钮进行部分滑动

时间:2017-06-19 12:30:03

标签: android android-recyclerview onclicklistener swipe

我正在尝试在RecyclerView中实现部分滑动并添加删除按钮。我想在用户点击删除按钮后才删除刷过的行。我正在使用ItemTouchHelperSimpleCallback并且能够使用下面的代码实现部分滑动。我有两个待处理的任务:

  1. 我正在使用onChildDraw方法实现部分滑动。我正在部分滑动时绘制一个红色矩形。我想添加文字"删除"在里面。是否可以添加Button而不是绘制矩形?
  2. 如何在rectange /按钮上添加点击监听器以执行删除操作。

    @Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        try {
    
            Bitmap icon;
            if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
                View itemView = viewHolder.itemView;
    
                float height = (float) itemView.getBottom() - (float) itemView.getTop();
                float width = height / 5;
                viewHolder.itemView.setTranslationX(dX / 5);
    
    
                Paint paint = new Paint();
    
                paint.setColor(Color.parseColor("#D32F2F"));
                RectF background = new RectF((float) itemView.getRight() + dX / 5, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom());
    
               RectF icon_dest = new RectF((float) (itemView.getRight() + dX /7), (float) itemView.getTop()+width, (float) itemView.getRight()+dX/20, (float) itemView.getBottom()-width);
    
               c.drawBitmap(null, null, icon_dest, paint);
            } else {
                super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

1 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. 是。这是可能的,但不是onChildDraw方法。有很多 第三方库使用两层方法。第一层是 您的项目视图,第二个具有所有按钮。当你滑动它 显示按钮层,您可以通过设置处理点击事件 按钮的OnClickListener。
  2. 将OnClickListener添加到onChildDraw中绘制的按钮 方法,你必须设置recylerView.setOnTouchListener来获取 (x,y)在屏幕上。请查看AdamWei的帖子here 指令。
  3. 您还可以查看我的帖子here。我已经使用ItemTouchHelper.SimpleCallback实现了所需的效果。它是一个简单的帮助类,易于使用。