如何更改/删除项目拖动高亮显示?我使用ItemTouchHelper,我知道我需要做的事情与onChildDraw方法,但我不希望覆盖整个ACTION_STATE_DRAG事件,只需要影响拖动项目RecyclerView拖动高亮显示
时出现的是灰色的框我有什么: gray frame
编辑:我注意到,框架不会出现在预棒棒糖设备,所以也许我只需要设置一些主题口音的颜色,但我无法找到正确的选择为它(尝试colorControlActivated和colorControlHighlight)
如何更改/删除项目拖动高亮显示?我使用ItemTouchHelper,我知道我需要做的事情与onChildDraw方法,但我不希望覆盖整个ACTION_STATE_DRAG事件,只需要影响拖动项目RecyclerView拖动高亮显示
时出现的是灰色的框我有什么: gray frame
编辑:我注意到,框架不会出现在预棒棒糖设备,所以也许我只需要设置一些主题口音的颜色,但我无法找到正确的选择为它(尝试colorControlActivated和colorControlHighlight)
我解决我的问题。这个灰色框架只是一个元素的高程,即简单的阴影,表示拖动(当你拿起一个元素拖动时,它变得高于其他元素,所以它有一个影子;我正在这样思考并且是正确的)。所以我设置了viewHolder.itemView.setOutlineProvider(null);
并摆脱它。完整的代码在这里:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setNullOutlineProvider(View view) {
view.setOutlineProvider(null);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState,
boolean isCurrentlyActive) {
final View view = viewHolder.itemView;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
setNullOutlineProvider(view);
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
// do some stuff here
} else {
super.onChildDraw(c, recyclerView, viewHolder,
dX, dY, actionState, isCurrentlyActive);
}
}
或者更好的做在您的自定义适配器
覆盖onChildDrawOver()
代替onChildDraw()
,onChildDraw()
是绘制背景,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);
if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
View itemView = viewHolder.itemView;
c.save();
c.clipRect(itemView.getLeft() + dX, itemView.getTop() + dY, itemView.getRight() + dX, itemView.getBottom() + dY);
c.translate(itemView.getLeft() + dX, itemView.getTop() + dY);
// draw the frame
c.drawColor(0x88888888);
c.restore();
}
}
什么是灰框? – Harlan