fix: 下拉手势改为在状态栏区域检测(避免ViewPager2拦截)

状态栏区域扩大为40dp触摸区,在此区域检测下拉手势进入考勤页

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dongliang
2026-04-28 18:38:17 +09:30
parent c812b9ee1a
commit 2d5726db9a
2 changed files with 21 additions and 12 deletions

View File

@@ -273,7 +273,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
findNavController().navigate(R.id.action_home_to_taskList, bundle) findNavController().navigate(R.id.action_home_to_taskList, bundle)
} }
/** 设置下拉手势 → 进入考勤打卡页 */ /** 设置下拉手势 → 进入考勤打卡页(在状态栏区域检测) */
@android.annotation.SuppressLint("ClickableViewAccessibility") @android.annotation.SuppressLint("ClickableViewAccessibility")
private fun setupPullDownGesture() { private fun setupPullDownGesture() {
val gestureDetector = android.view.GestureDetector( val gestureDetector = android.view.GestureDetector(
@@ -287,21 +287,22 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
): Boolean { ): Boolean {
if (e1 == null) return false if (e1 == null) return false
val dy = e2.y - e1.y val dy = e2.y - e1.y
val dx = e2.x - e1.x // 下拉手势dy > 0 且速度 > 0
// 下拉dy > 0且垂直幅度 > 水平 if (dy > 30 && velocityY > 100) {
if (dy > 80 && kotlin.math.abs(dy) > kotlin.math.abs(dx)) {
navigateToPunch() navigateToPunch()
return true return true
} }
return false return false
} }
override fun onDown(e: android.view.MotionEvent): Boolean = true
} }
) )
// 给 ViewPager2 内部的 RecyclerView 添加触摸监听 // 在状态栏上方的触摸区域检测下拉(不被 ViewPager2 拦截)
binding.viewPager.getChildAt(0)?.setOnTouchListener { _, event -> binding.pullDownArea.setOnTouchListener { _, event ->
gestureDetector.onTouchEvent(event) gestureDetector.onTouchEvent(event)
false true
} }
} }

View File

@@ -9,12 +9,20 @@
android:paddingTop="27dp" android:paddingTop="27dp"
android:paddingEnd="21dp"> android:paddingEnd="21dp">
<!-- 固定状态栏(不随 ViewPager2 滑动) --> <!-- 固定状态栏(不随 ViewPager2 滑动)+ 下拉触摸区域 -->
<com.xiaoqu.watch.ui.widget.StatusBarView <FrameLayout
android:id="@+id/statusBar" android:id="@+id/pullDownArea"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="24dp" android:layout_height="40dp"
android:layout_marginBottom="3dp" /> android:layout_marginBottom="3dp">
<com.xiaoqu.watch.ui.widget.StatusBarView
android:id="@+id/statusBar"
android:layout_width="match_parent"
android:layout_height="24dp"
android:layout_gravity="center_vertical" />
</FrameLayout>
<!-- ViewPager2 在状态栏下方滑动 --> <!-- ViewPager2 在状态栏下方滑动 -->
<androidx.viewpager2.widget.ViewPager2 <androidx.viewpager2.widget.ViewPager2