滑动后更改recyclerview项目背景

Sah*_*een 1 java android android-layout android-recyclerview

嗨,我正在使用来显示垂直列表,recycler view并且我正在使用渐变背景recycler viewrecycler view使用来向左或向右滑动项目时,我正在删除项目ItemTouchHelper

ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            mRecyclerAdapter.removeStock(viewHolder.getAdapterPosition());
        }

        @Override
        public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
            super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
            if(actionState!=ItemTouchHelper.ACTION_STATE_IDLE){
                viewHolder.itemView.setBackgroundColor(Color.LTGRAY);
            }
        }
    };
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
    itemTouchHelper.attachToRecyclerView(recyclerView);
Run Code Online (Sandbox Code Playgroud)

在这里,我将物品轻扫时将“回收者视图”项目背景更改为浅灰色,但是当回收者视图项目返回到空闲状态时,我希望恢复原始背景,即我希望返回该渐变背景。Recylerview xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_background"
tools:context=".ui.StockFragment"
tools:showIn="@layout/activity_main">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:scrollbars="none"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

可绘制文件:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient
    android:type="linear"
    android:startColor="#FF18181F"
    android:endColor="#FF27354D"
    android:angle="90"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

Kar*_*uri 5

也许您可以尝试onSelectedChanged()。另外,也许您可​​以clearView()在调用超类方法之后重写并在那里进行更改。

编辑

在阅读了更多文档之后,我现在认为这onSelectedChanged()是更改项目开始滑动时的背景以及何时变为空闲状态的正确背景。检查的值viewHolder是否不为null,然后检查actionState将背景更改为的内容。

我认为onChildDraw()这样做不合适,因为它已经处于绘制阶段,并且在其中更改视图的背景可能会导致重新绘制。