Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 回收视图拖动高光_Android_Android Recyclerview_Itemtouchhelper - Fatal编程技术网

Android 回收视图拖动高光

Android 回收视图拖动高光,android,android-recyclerview,itemtouchhelper,Android,Android Recyclerview,Itemtouchhelper,如何更改/删除项目拖动突出显示?我使用的是ItemTouchHelper,我知道我需要使用onChildDraw方法做一些事情,但我不想覆盖整个动作状态拖动事件,只需要影响拖动项目时出现的灰色框 我所拥有的: 编辑:我注意到框架没有出现在棒棒糖前的设备上,所以我可能只需要设置一些主题强调色,但我找不到合适的选择器(尝试了colorControlActivated和colorControlHighlight)覆盖OnChildrawover()而不是onchildraw(),onchildraw

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

我所拥有的:


编辑:我注意到框架没有出现在棒棒糖前的设备上,所以我可能只需要设置一些主题强调色,但我找不到合适的选择器(尝试了colorControlActivatedcolorControlHighlight

覆盖
OnChildrawover()
而不是
onchildraw()
onchildraw()
用于绘制背景,
onchildrawover()
用于绘制前景,请尝试以下代码:

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

覆盖
onchildrawover()
而不是
onchildraw()
onchildraw()
用于绘制背景,
onchildrawover()
用于绘制前景,请尝试以下代码:

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

我解决了我的问题。那个灰色的框架只是一个元素的立面,即表示拖动的简单阴影(当你拾取一个元素进行拖动时,它会高于其他元素,所以它有一个阴影;我是这样想的,是正确的)。所以我设置了
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);
    }
}

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

我解决了我的问题。那个灰色的框架只是一个元素的立面,即表示拖动的简单阴影(当你拾取一个元素进行拖动时,它会高于其他元素,所以它有一个阴影;我是这样想的,是正确的)。所以我设置了
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);
    }
}

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

什么是灰色框架?什么是灰色框架?正如您在我的示例中看到的,框架在视图下方绘制,因此我不需要使用onchildrawover()。当我尝试你的代码时,灰色的框架仍然存在,但是从onchildrawover()来看,视图是灰色的,我仍然不知道你的图片中的灰色框架是什么。你是说对话下面的阴影吗?或者你想让视图更亮,我的例子代表的是实际的图片,而不是我想要实现的。上对话框-为正常状态,下对话框-视图处于拖动状态。在下方对话框的左侧,您可以看到椭圆灰色笔划的一小部分-这是我正在谈论的灰色框架,我想去掉它,因为您可以在我的示例中看到,框架在视图下方绘制,所以我不需要使用onchildrawover()。当我尝试你的代码时,灰色的框架仍然存在,但是从onchildrawover()来看,视图是灰色的,我仍然不知道你的图片中的灰色框架是什么。你是说对话下面的阴影吗?或者你想让视图更亮,我的例子代表的是实际的图片,而不是我想要实现的。上对话框-为正常状态,下对话框-视图处于拖动状态。在下方对话框的左侧,你可以看到椭圆灰色笔划的一小部分——这就是我所说的灰色框架,我想去掉它