手动访问进度

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 根据手势速度平滑地打开或关闭抽屉式菜单。