如何在 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 进行调试时如何“设置值...”
如何使用 Android Studio 在 Flutter 中构建 .apk 和 .ipa?