Android Kotlin无依赖实现侧滑显示按钮(带吸附与删除逻辑)的问题求助
Android Kotlin无依赖实现侧滑显示按钮(带吸附与删除逻辑)的问题求助
各位大佬好,我刚入坑Android Kotlin开发,最近卡在了一个侧滑功能的实现上,想请教一下大家!
我想要实现一个无需依赖第三方库的侧滑显示操作按钮功能,核心需求有两个:
- 吸附逻辑:当内容区域滑到指定阈值时,要“贴住”后面的按钮区域,不会随意回弹
- 删除逻辑:当滑动超过删除阈值时,RecyclerView的item会被第一个操作按钮(删除按钮)填满,随后执行item删除操作
但现在遇到了棘手的问题:使用ItemTouchHelper的时候,dX是相对于内容当前位置来移动的,这导致删除阈值的位置计算总是出bug,dX的数值会变得异常大。而且因为我需要移动的是内容区域(cardContent)来露出后面的按钮,而不是移动整个item元素,所以没办法直接用super.onChildDraw传入dX参数的常规方式来处理。
以下是我当前RecyclerView item的XML布局代码:
<?xml version="1.0" encoding="utf-8"?> <com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/itemStroke" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" app:cardBackgroundColor="@android:color/transparent" app:strokeWidth="1dp" app:strokeColor="@color/green" app:cardCornerRadius="12dp" android:clipToPadding="false" android:clipChildren="false"> <FrameLayout android:id="@+id/itemCard" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/itemBtns" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="end" android:showDividers="beginning|middle" android:divider="?android:attr/dividerHorizontal" android:orientation="horizontal"> <ImageButton android:id="@+id/btnDelete" android:layout_width="40dp" android:layout_height="match_parent" android:src="@drawable/ic_delete_18" android:background="@color/red" android:scaleType="centerInside"/> <ImageButton android:id="@+id/btnOptions" android:layout_width="40dp" android:layout_height="match_parent" android:src="@drawable/ic_options_24" android:background="@color/white" android:scaleType="centerInside" app:tint="@color/black"/> <ImageButton android:id="@+id/btnArchive" android:layout_width="40dp" android:layout_height="match_parent" android:src="@drawable/ic_archive_18" android:background="@color/blue" android:scaleType="centerInside" /> </LinearLayout> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cardContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/third"> <TextView android:id="@+id/textDateStart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="12dp" android:layout_marginTop="4dp" android:layout_marginEnd="4dp" android:layout_marginBottom="4dp" android:text="07.07.2024" android:textColor="@color/white_50" android:textSize="12sp" app:layout_constraintBottom_toTopOf="@+id/textItemName" app:layout_constraintEnd_toStartOf="@id/textDateSpare" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textDateSpare" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="/" android:textSize="12sp" android:textColor="@color/white_50" app:layout_constraintBaseline_toBaselineOf="@id/textDateStart" app:layout_constraintStart_toEndOf="@id/textDateStart" app:layout_constraintEnd_toStartOf="@id/textDateEnd" /> <TextView android:id="@+id/textDateEnd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="4dp" android:text="~" android:textSize="12sp" android:textColor="@color/white_50" app:layout_constraintBaseline_toBaselineOf="@id/textDateSpare" app:layout_constraintStart_toEndOf="@id/textDateSpare" /> <View android:id="@+id/statusIndicator" android:layout_width="8dp" android:layout_height="8dp" android:layout_marginStart="6dp" android:background="@drawable/bg_status_indicator_active" app:layout_constraintTop_toTopOf="@id/textItemName" app:layout_constraintBottom_toBottomOf="@id/textItemName" app:layout_constraintStart_toEndOf="@id/textItemName" /> </androidx.constraintlayout.widget.ConstraintLayout> </FrameLayout> </com.google.android.material.card.MaterialCardView>
有没有大佬能指点一下,这种情况下该怎么处理dX的计算问题,以及如何正确实现移动内容区域来露出按钮、同时完成吸附和删除的逻辑呀?多谢各位了!
内容来源于stack exchange
相关产品推荐
相关产品推荐

