java - 滑动时更改 recyclerview 项目背景

标签 java android android-layout android-recyclerview

您好,我正在使用 recycler view 显示垂直列表,我正在为 recycler view 使用渐变背景。我正在删除 recycler 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);

在这里,当项目被滑动时,我将回收器 View 项目背景更改为浅灰色,但当回收器 View 项目返回到空闲状态时,我希望返回原始背景,即我想要那个渐变背景。 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>

可绘制文件:

<?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>

最佳答案

也许你可以在onSelectedChanged()里面试试.或者,也许您可​​以覆盖 clearView()并在调用父类(super class)方法后在那里进行更改。

编辑

在阅读了更多文档后,我现在认为 onSelectedChanged() 是更改背景的正确位置,无论是项目开始滑动时 还是返回空闲时 .检查 viewHolder 是否不为空,然后检查 actionState 以了解将背景更改为什么。

我认为 onChildDraw() 不是执行此操作的正确位置,因为它已经处于绘图阶段并且更改 View 的背景可能会导致另一次重绘。

关于java - 滑动时更改 recyclerview 项目背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37770913/

相关文章:

android - Android 许可服务的问题

android - android中有没有相当于苹果的carekit和researchkit的框架?

android - 在 Android 中创建自定义选项卡

使用 Aeris Weather SDK 的 java.lang.ClassNotFoundException : com. hamweather.aeris.maps.R$layout

java - For 循环和计算移动平均线

java - 如何生成遵守 checkstyle 规则的 toString 和 hashCode 方法

java - 无法为 Java 进程设置 LD_LIBRARY_PATH

java - junit 断言语句

android - Google Play 订阅订单不存在

Android Studio 突然无法解析符号 R