Animation 如何在flatter中使用Android滚动行为设置容器移动动画?
我的目标是,有一个可以在垂直轴上拖动的容器。移除手指后,容器应以结束触摸后的速度向前移动一点。我希望在你停止在android手机上滚动并继续滚动一点点后,有完全相同的动画/感觉 到目前为止,情况是这样的: 这是我的代码:Animation 如何在flatter中使用Android滚动行为设置容器移动动画?,animation,flutter,dart,widget,Animation,Flutter,Dart,Widget,我的目标是,有一个可以在垂直轴上拖动的容器。移除手指后,容器应以结束触摸后的速度向前移动一点。我希望在你停止在android手机上滚动并继续滚动一点点后,有完全相同的动画/感觉 到目前为止,情况是这样的: 这是我的代码: class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin { double _offeset = 0; double get offs
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),
),
),
],
),
);
}
}
class\u MyHomePageState扩展状态
使用SingleTickerProviderStateMixin{
double _offset=0;
双get offset=>\u offset;
设置偏移量(双设置){
如果(设定值<500)
设置状态(){
_offset=offset;
});
}
动画控制器;
钳位仿真;
@凌驾
void initState(){
super.initState();
控制器=动画控制器(vsync:this,上限:5)
…addListener(){
偏移量+=控制器值;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:堆栈(
儿童:[
定位(
顶部:偏移,
左:0,,
右:0,,
儿童:手势检测器(
onVerticalDragUpdate:(DragUpdate详细信息){
偏移量+=details.delta.dy;
},
垂直排水量:(排水量详情){
模拟=夹紧模拟(
位置:0,速度:详细信息。primaryVelocity,
);
控制器。带动画的(模拟);
},
子:容器(高度:50,宽度:50,颜色:颜色。红色),
),
),
],
),
);
}
}
问题是,这不是Android的滚动动画,我不知道如何获得它。(感觉动画是线性的,停止得太早,没有利用速度参数)我甚至使用了
ClampingScrollSimulation
类,颤振中的所有滚动小部件都使用它来模拟Android滚动。解决方案是将\u controller.value
与\u controller.velocity
相乘。像这样:
offset += controller.value * _controller.velocity / 100;