手动访问进度

借助 Jetpack Compose 中的 PredictiveBackHandler 可组合项,您可以拦截返回手势并访问其进度。您可以实时响应用户的返回手势,根据用户滑动距离创建自定义动画或行为。

如需使用 PredictiveBackHandler,请确保您使用的是 androidx.activity:activity:1.6.0 或更高版本。

PredictiveBackHandler 提供了一个 Flow<BackEventCompat>,用于发出表示返回手势进度的事件。每个事件都包含以下信息:

  • progress:介于 0 到 1 之间的浮点值,表示返回手势的进度(0 = 手势已开始,1 = 手势已完成)。
  • touchXtouchY:轻触事件的 X 坐标和 Y 坐标。

以下代码段展示了 PredictiveBackHandler 的基本用法:

PredictiveBackHandler(true) { progress: Flow<BackEventCompat> ->
    // code for gesture back started
    try {
        progress.collect { backEvent ->
            // code for progress
            boxScale = 1F - (1F * backEvent.progress)
        }
        // code for completion
        boxScale = 0F
    } catch (e: CancellationException) {
        // code for cancellation
        boxScale = 1F
    }
}

示例:与抽屉式导航栏集成

以下示例演示了如何使用 PredictiveBackHandler 实现自定义应用内动画,以便在 JetLagged 中响应返回手势,与抽屉式导航栏进行流畅互动:

图 5. 支持预测性返回的抽屉式导航栏。

在此示例中,PredictiveBackHandler 用于:

  • 跟踪返回手势的进度。
  • 根据手势进度更新抽屉的 translationX
  • 使用 velocityTracker 在手势完成或取消时,根据手势速度平滑地打开或关闭抽屉。