RecyclerView拖动突出显示

时间:2016-07-13 05:02:39

标签: android android-recyclerview itemtouchhelper

如何更改/删除项目拖动突出显示?我正在使用 ItemTouchHelper ,我知道我需要使用 onChildDraw 方法做一些事情,但我不想覆盖整个 ACTION_STATE_DRAG 事件,只需要影响拖动项目时出现的灰色框架

我拥有的: gray frame

编辑:我注意到框架没有出现在Lollipop之前的设备上,所以也许我只需要设置一些主题强调颜色,但我找不到合适的选择器(尝试 colorControlActivated colorControlHighlight

2 个答案:

答案 0 :(得分:3)

我解决了我的问题。那个灰色的框架只是一个元素的高度,即表示拖动的简单阴影(当你拿起一个要拖动的元素时,它会变得高于其他元素,所以它有一个阴影;我正在这样思考并且是正确的)。所以我设置EXTRA_LIBS=并摆脱它。完整的代码在这里:

/path/to/my_new_openssl_dir/lib/libssl.dylib /path/to/my_new_openssl_dir/lib/libcrypto.dylib

或者更好地在自定义适配器中执行此操作

答案 1 :(得分:0)

覆盖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();
    }
}