[CymChad/BaseRecyclerViewAdapterHelper]滑动删除问题

2024-08-20 878 views
5

为什么recyclerview设置为横向,上下滑动删除的时候onItemSwipeMoving的canvas.draw没效果,recyclerview设置为横向就可以。 public void onItemSwipeMoving(Canvas canvas, RecyclerView.ViewHolder viewHolder, float dX, float dY, boolean isCurrentlyActive) { Log.d(TAG, "View SwipeMoving: "); canvas.drawColor(ContextCompat.getColor(ProgramingActivity.this, R.color.beiya_blue)); canvas.drawText("删除", 40, 40, paint); } 谢谢。

回答

8

你只要开启了并设置了监听应该就可以进入该方法的。

6

滑动删除开启的状态下,能否设置分组,比如联系人列表中的字母排序

4

我直接用demo改成横向的,也没有效果。反而在删除完,后面的item在往前移的时候,有时候会出现画的效果。

1

@jeesezh 可以,这个不冲突

9

@qq471077336 我这边试试看

1

我看了下,是进了这个onItemSwipeMoving方法。

7

应该是画布的问题。

2

找到解决方案了继承ItemDragAndSwipeCallback 重写onChildDrawOver方法

Override
    public void onChildDrawOver(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
                                float dX, float dY, int actionState, boolean isCurrentlyActive) {
        super.onChildDrawOver(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
        Log.e("test", "onChildDrawOver: ---------------");

        if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE
                && !isViewCreateByAdapter(viewHolder)) {
            Log.e("test", "onChildDrawOver:dY=="+dY);
            View itemView = viewHolder.itemView;

            c.save();
            if (dY > 0) {
                c.clipRect(itemView.getLeft(), itemView.getTop(),
                        itemView.getRight() , itemView.getTop()+dY);
                c.translate(itemView.getTop(), itemView.getLeft());
            }else {
                c.clipRect(itemView.getLeft(), itemView.getBottom(),
                        itemView.getRight() , itemView.getBottom()+dY);
                c.translate(itemView.getBottom()+dY, itemView.getLeft());
            }
//            if (dX > 0) {
//                c.clipRect(itemView.getLeft(), itemView.getTop(),
//                        itemView.getLeft() + dX, itemView.getBottom());
//                c.translate(itemView.getLeft(), itemView.getTop());
//            } else {
//                c.clipRect(itemView.getRight() + dX, itemView.getTop(),
//                        itemView.getRight(), itemView.getBottom());
//                c.translate(itemView.getRight() + dX, itemView.getTop());
//            }
//
//

            mAdapter.onItemSwiping(c, viewHolder, dX, dY, isCurrentlyActive);
            c.restore();

        }
    }
6

好的,多谢

5

new ItemTouchHelper(传入改过后的Callback);