如何在 Flutter 中使用 Android 滚动行为为容器移动设置动画?

Posted

技术标签:

【中文标题】如何在 Flutter 中使用 Android 滚动行为为容器移动设置动画?【英文标题】:How to animate container movement with Android scroll behavior in Flutter? 【发布时间】:2020-01-23 22:21:12 【问题描述】:

我的目标是,有一个可以在垂直轴上拖动的容器。移开手指后,容器应该以我在结束触摸后的速度向前移动一点。我希望在您停止在 android 手机上滚动并且它会继续滚动更进一步后获得完全相同的动画/感觉。

这是目前的样子:

这是我的代码:

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin 
  double _offeset = 0;

  double get offset => _offeset;

  set offset(double offeset) 
    if(offeset < 500)
    setState(() 
      _offeset = offeset;
    );
  

  AnimationController controller;
  ClampingScrollSimulation simulation;

  @override
  void initState() 
    super.initState();

    controller = AnimationController(vsync: this, upperBound: 5)
      ..addListener(() 
        offset += controller.value;
      );
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Stack(
        children: <Widget>[
          Positioned(
            top: offset,
            left: 0,
            right: 0,
            child: GestureDetector(
              onVerticalDragUpdate: (DragUpdateDetails details) 
                offset += details.delta.dy;
              ,
              onVerticalDragEnd: (DragEndDetails details) 
                simulation = ClampingScrollSimulation(
                   position: 0, velocity: details.primaryVelocity,
                );
                controller.animateWith(simulation);
              ,
              child: Container(height: 50, width: 50, color: Colors.red),
            ),
          ),
        ],
      ),
    );
  

问题是,这不是 Android 滚动动画,我不知道如何获取它。 (感觉动画是线性的,过早停止,并没有利用速度参数)我什至在使用ClampingScrollSimulation 类,在 Flutter 中的所有 Scroll 小部件中都使用该类来模拟 Android 滚动。

【问题讨论】:

【参考方案1】:

解决方案是将_controller.value_controller.velocity 相乘。像这样:

offset += controller.value * _controller.velocity / 100;

【讨论】:

以上是关于如何在 Flutter 中使用 Android 滚动行为为容器移动设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Studio 中使用 Flutter 进行调试时如何“设置值...”

如何在 Flutter 中隐藏 Android 状态栏

如何使用 Android Studio 在 Flutter 中构建 .apk 和 .ipa?

如何在flutter中嵌入原生android apis?

Flutter 如何在 Android Studio 中制作发布版本?

如何在 Flutter 中使用 Android 滚动行为为容器移动设置动画?