为什么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); } 谢谢。
Q
[CymChad/BaseRecyclerViewAdapterHelper]滑动删除问题
9
A
回答
9
你只要开启了并设置了监听应该就可以进入该方法的。
9
滑动删除开启的状态下,能否设置分组,比如联系人列表中的字母排序
0
我直接用demo改成横向的,也没有效果。反而在删除完,后面的item在往前移的时候,有时候会出现画的效果。
2
@jeesezh 可以,这个不冲突
0
@qq471077336 我这边试试看
8
我看了下,是进了这个onItemSwipeMoving方法。
1
应该是画布的问题。
0
找到解决方案了继承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();
}
}
3
好的,多谢
1
new ItemTouchHelper(传入改过后的Callback);