簡體   English   中英

滑動后更改recyclerview項目背景

[英]Change recyclerview item background when swiped

你好我顯示垂直列表中使用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);

在這里,我將物品輕掃時將“回收者視圖”項目背景更改為淺灰色,但是當回收者視圖項目返回到空閑狀態時,我希望恢復原始背景,即我希望返回該漸變背景。 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()並在調用超類方法之后在此處進行更改。

編輯

在閱讀了更多文檔之后,我現在認為onSelectedChanged()是更改背景的正確位置,無論何時項目開始滑動以及何時返回空閑。 檢查viewHolder不為null,然后檢查actionState以將背景更改為什么。

我認為onChildDraw()是執行此操作的不正確位置,因為它已經處於繪制階段,並且在此處更改視圖的背景可能會導致再次重新繪制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM