feat(swipe): 接入 SwipeRevealLayout 并统一侧滑删除交互
引入 SwipeRevealLayout 替换原有滑动删除方案,修复点击冲突与开合状态问题,并在菜品列表与食材列表中统一删除确认与侧滑行为。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#FFEF5350" />
|
||||
<!-- 仅右侧两个角有圆角,与前景层圆角半径一致 -->
|
||||
<corners
|
||||
android:topRightRadius="15dp"
|
||||
android:bottomRightRadius="15dp" />
|
||||
</shape>
|
||||
@@ -1,32 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- 白色垃圾桶图标:使用 evenOdd 填充规则实现条纹镂空,无硬编码背景色依赖 -->
|
||||
<!-- 白色垃圾桶图标-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="40dp"
|
||||
android:height="40dp"
|
||||
android:viewportWidth="40"
|
||||
android:viewportHeight="40">
|
||||
|
||||
<!-- 桶盖 -->
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="
|
||||
M10,13 A1,1 0 0,1 10,11 L14,11 L14,9
|
||||
A2,2 0 0,1 16,7 L24,7
|
||||
A2,2 0 0,1 26,9 L26,11 L30,11
|
||||
A1,1 0 0,1 30,13 Z
|
||||
M16,9 L16,11 L24,11 L24,9 Z" />
|
||||
|
||||
<!-- 桶身:外轮廓 + 三条竖槽镂空,evenOdd 使竖槽透明 -->
|
||||
android:pathData="M913.5,225.8h-241V128c0,-34.5 -28.3,-62.8 -62.8,-62.8H413.3c-34.5,0 -62.8,28.3 -62.8,62.8v97.8H111.1c-25.8,0 -46.9,21.1 -46.9,46.9 0,25.8 21.1,46.9 46.9,46.9h81v590.3c0,25.8 21.1,46.9 46.9,46.9h546.4c25.8,0 46.9,-21.1 46.9,-46.9 0,-1.1 -0.1,-2.2 -0.1,-3.3V319.5h81.5c25.8,0 46.9,-21.1 46.9,-46.9 -0.2,-25.7 -21.3,-46.8 -47.1,-46.8zM448.1,156.1c0,-0.1 0,-0.1 0,0l128,-0.1s0.1,0 0.1,0.1v69.7h-128v-69.7zM737,863H287V319.5h450V863z" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="evenOdd"
|
||||
android:pathData="
|
||||
M12,15 L13.5,33
|
||||
A2,2 0 0,0 15.5,35 L24.5,35
|
||||
A2,2 0 0,0 26.5,33 L28,15 Z
|
||||
M17,18 L17,32 L19,32 L19,18 Z
|
||||
M19.5,18 L19.5,32 L21.5,32 L21.5,18 Z
|
||||
M22,18 L22,32 L24,32 L24,18 Z" />
|
||||
|
||||
android:pathData="M420.8,767.8c27.4,0 49.8,-22.4 49.8,-49.8V466c0,-27.4 -22.4,-49.8 -49.8,-49.8S371,438.6 371,466v252c0,27.4 22.4,49.8 49.8,49.8zM602.9,767.8c27.4,0 49.8,-22.4 49.8,-49.8V466c0,-27.4 -22.4,-49.8 -49.8,-49.8s-49.8,22.4 -49.8,49.8v252c0,27.4 22.4,49.8 49.8,49.8z" />
|
||||
</vector>
|
||||
|
||||
|
||||
@@ -1,85 +1,109 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.shuwei.dish.match.view.swipereveallayout.SwipeRevealLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/swipeRevealLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="120dp"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:background="@drawable/shape_white_fb_15_corners">
|
||||
app:dragEdge="right">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:ellipsize="end"
|
||||
android:includeFontPadding="false"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="30sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDishType"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tvDishWeight"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:text="雪菜" />
|
||||
<FrameLayout
|
||||
android:id="@+id/layoutDelete"
|
||||
android:layout_width="160dp"
|
||||
android:layout_height="120dp"
|
||||
android:background="@drawable/bg_swipe_delete">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishType"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="15dp"
|
||||
android:ellipsize="end"
|
||||
android:includeFontPadding="false"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/black999"
|
||||
android:textSize="26sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@id/tvDishName"
|
||||
app:layout_constraintStart_toStartOf="@id/tvDishName"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDishName"
|
||||
tools:text="主辅材:主材" />
|
||||
<ImageView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="删除"
|
||||
android:src="@drawable/ic_trash_white" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivOperateIcon"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="60dp"
|
||||
tools:src="@drawable/ic_dish_selected"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/ivClearIcon"
|
||||
android:layout_marginEnd="10dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:ignore="ContentDescription" />
|
||||
</FrameLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivClearIcon"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="60dp"
|
||||
android:src="@drawable/ic_delete"
|
||||
android:layout_marginEnd="10dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:ignore="ContentDescription" />
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/clBlock"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="120dp"
|
||||
android:background="@drawable/shape_white_fb_15_corners">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishWeight"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:textColor="@color/dish_green"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold"
|
||||
android:hint="-"
|
||||
android:textColorHint="@color/gray_d6"
|
||||
app:layout_constraintBottom_toBottomOf="@id/ivOperateIcon"
|
||||
app:layout_constraintEnd_toStartOf="@id/ivOperateIcon"
|
||||
app:layout_constraintTop_toTopOf="@id/ivOperateIcon"
|
||||
tools:text="375克"
|
||||
tools:ignore="HardcodedText" />
|
||||
<TextView
|
||||
android:id="@+id/tvDishName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:ellipsize="end"
|
||||
android:includeFontPadding="false"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="30sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDishType"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tvDishWeight"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:text="雪菜" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
<TextView
|
||||
android:id="@+id/tvDishType"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="15dp"
|
||||
android:ellipsize="end"
|
||||
android:includeFontPadding="false"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/black999"
|
||||
android:textSize="26sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@id/tvDishName"
|
||||
app:layout_constraintStart_toStartOf="@id/tvDishName"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDishName"
|
||||
tools:text="主辅材:主材" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivOperateIcon"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/ivClearIcon"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/ic_dish_selected" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivClearIcon"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:src="@drawable/ic_delete"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishWeight"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:hint="-"
|
||||
android:textColor="@color/dish_green"
|
||||
android:textColorHint="@color/gray_d6"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toBottomOf="@id/ivOperateIcon"
|
||||
app:layout_constraintEnd_toStartOf="@id/ivOperateIcon"
|
||||
app:layout_constraintTop_toTopOf="@id/ivOperateIcon"
|
||||
tools:ignore="HardcodedText"
|
||||
tools:text="375克" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</com.shuwei.dish.match.view.swipereveallayout.SwipeRevealLayout>
|
||||
|
||||
@@ -1,61 +1,87 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.shuwei.dish.match.view.swipereveallayout.SwipeRevealLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/clBlock"
|
||||
android:id="@+id/swipeRevealLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_marginTop="7dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:layout_marginTop="7dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:background="@drawable/shape_white_fb_15_corners"
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
android:paddingStart="30dp"
|
||||
android:paddingEnd="30dp">
|
||||
app:dragEdge="right">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvShowState"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/black999"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="烹饪中" />
|
||||
<!-- 后景层(secondaryView = getChildAt(0)):删除按钮,右对齐 -->
|
||||
<FrameLayout
|
||||
android:id="@+id/layoutDelete"
|
||||
android:layout_width="160dp"
|
||||
android:layout_height="150dp"
|
||||
android:background="@drawable/bg_swipe_delete">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/dish_green"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDishCount"
|
||||
app:layout_constraintEnd_toStartOf="@id/tvShowState"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:text="冬虫夏草炝拌芥兰苗" />
|
||||
<ImageView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="删除"
|
||||
android:src="@drawable/ic_trash_white" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishCount"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/black999"
|
||||
android:textSize="26sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@id/tvDishName"
|
||||
app:layout_constraintStart_toStartOf="@id/tvDishName"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDishName"
|
||||
tools:text="累计统计:2.3kg(2次)" />
|
||||
</FrameLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
<!-- 前景层(mainView = getChildAt(1)):item 主内容 -->
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/clBlock"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="150dp"
|
||||
android:background="@drawable/shape_white_fb_15_corners"
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
android:paddingStart="30dp"
|
||||
android:paddingEnd="30dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvShowState"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/black999"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="烹饪中" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/dish_green"
|
||||
android:textSize="32sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDishCount"
|
||||
app:layout_constraintEnd_toStartOf="@id/tvShowState"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:text="冬虫夏草炝拌芥兰苗" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDishCount"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/black999"
|
||||
android:textSize="26sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@id/tvDishName"
|
||||
app:layout_constraintStart_toStartOf="@id/tvDishName"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDishName"
|
||||
tools:text="累计统计:2.3kg(2次)" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</com.shuwei.dish.match.view.swipereveallayout.SwipeRevealLayout>
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<declare-styleable name="SwipeRevealLayout">
|
||||
<attr name="dragEdge">
|
||||
<flag name="left" value="1" />
|
||||
<flag name="right" value="2" />
|
||||
<flag name="top" value="4" />
|
||||
<flag name="bottom" value="8" />
|
||||
</attr>
|
||||
|
||||
<attr name="mode">
|
||||
<enum name="normal" value="0" />
|
||||
<enum name="same_level" value="1" />
|
||||
</attr>
|
||||
|
||||
<attr name="flingVelocity" format="integer" />
|
||||
|
||||
<attr name="minDistRequestDisallowParent" format="dimension" />
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user