diff --git a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt index a761872..a167e8f 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt @@ -334,36 +334,43 @@ class HomeFragment : BaseFragment() { } } - /** 设置下拉手势 → 进入考勤打卡页(在状态栏区域检测) */ + /** + * 设置下拉手势 → 进入考勤打卡页 + * 触摸区域:上半屏(140dp),只拦截垂直下拉,水平滑动透传给 ViewPager2 + */ @android.annotation.SuppressLint("ClickableViewAccessibility") private fun setupPullDownGesture() { - val gestureDetector = android.view.GestureDetector( - requireContext(), - object : android.view.GestureDetector.SimpleOnGestureListener() { - override fun onFling( - e1: android.view.MotionEvent?, - e2: android.view.MotionEvent, - velocityX: Float, - velocityY: Float - ): Boolean { - if (e1 == null) return false - val dy = e2.y - e1.y - // 下拉手势(dy > 0 且速度 > 0) - if (dy > 30 && velocityY > 100) { - navigateToPunch() - return true - } - return false - } + var startY = 0f + var startX = 0f - override fun onDown(e: android.view.MotionEvent): Boolean = true - } - ) - - // 在状态栏上方的触摸区域检测下拉(不被 ViewPager2 拦截) binding.pullDownArea.setOnTouchListener { _, event -> - gestureDetector.onTouchEvent(event) - true + when (event.action) { + android.view.MotionEvent.ACTION_DOWN -> { + startY = event.y + startX = event.x + true // 拦截 DOWN + } + android.view.MotionEvent.ACTION_MOVE -> { + val dy = event.y - startY + val dx = event.x - startX + // 如果水平滑动幅度 > 垂直 → 不拦截,透传给 ViewPager2 + if (kotlin.math.abs(dx) > kotlin.math.abs(dy) + 10) { + false + } else { + true + } + } + android.view.MotionEvent.ACTION_UP -> { + val dy = event.y - startY + val dx = event.x - startX + // 下拉(dy > 50)且垂直幅度 > 水平 + if (dy > 50 && kotlin.math.abs(dy) > kotlin.math.abs(dx)) { + navigateToPunch() + } + true + } + else -> false + } } } diff --git a/app/src/main/java/com/xiaoqu/watch/ui/punch/PunchFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/punch/PunchFragment.kt index 562ca54..16f2deb 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/punch/PunchFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/punch/PunchFragment.kt @@ -6,6 +6,7 @@ import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController import com.xiaoqu.watch.R import com.xiaoqu.watch.data.punch.PunchStatus import com.xiaoqu.watch.databinding.FragmentPunchBinding @@ -71,6 +72,9 @@ class PunchFragment : BaseFragment() { // 获取考勤状态 fetchAttendance() + // 上滑返回手势 + setupSwipeUpToBack() + // 监听系统状态事件 observeEvents() } @@ -310,4 +314,28 @@ class PunchFragment : BaseFragment() { } } } + + /** 上滑返回首页 */ + @android.annotation.SuppressLint("ClickableViewAccessibility") + private fun setupSwipeUpToBack() { + var startY = 0f + + binding.contentArea.setOnTouchListener { _, event -> + when (event.action) { + android.view.MotionEvent.ACTION_DOWN -> { + startY = event.y + true + } + android.view.MotionEvent.ACTION_UP -> { + val dy = event.y - startY + // 上滑(dy < -50)→ 返回 + if (dy < -50) { + findNavController().popBackStack() + } + true + } + else -> true + } + } + } } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 1ead59a..00b2534 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,34 +1,40 @@ - - + + android:background="@color/background"> - - + + android:layout_height="match_parent" + android:orientation="vertical" + android:paddingStart="21dp" + android:paddingTop="27dp" + android:paddingEnd="21dp"> + + android:layout_marginBottom="3dp" /> - + + - - + + + + android:layout_height="140dp" + android:layout_gravity="top" /> - + diff --git a/app/src/main/res/layout/fragment_punch.xml b/app/src/main/res/layout/fragment_punch.xml index bfc23f6..25d1bea 100644 --- a/app/src/main/res/layout/fragment_punch.xml +++ b/app/src/main/res/layout/fragment_punch.xml @@ -1,7 +1,8 @@ - + - + - + + android:textSize="26sp" + android:layout_marginBottom="27dp" /> - + + android:orientation="vertical"> @@ -58,14 +58,13 @@ @@ -87,7 +86,7 @@ android:layout_height="wrap_content" android:text="低耗电模式" android:textColor="@color/warning" - android:textSize="20sp" + android:textSize="22sp" android:textStyle="bold" /> @@ -104,14 +103,4 @@ - - -