手动访问进度

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
        throw e
    }
}

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

此示例演示了如何使用 PredictiveBackHandler 实现自定义应用内动画,以在 JetLagged 中响应返回手势,从而创建与导航抽屉的顺畅互动:

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

在此示例中,PredictiveBackHandler 用于:

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