use*_*641 3 flutter flutter-animation
AnimatedRotation 用于动画罗盘
我正在尝试向我的应用程序添加指南针。将旋转动画从 359 设置为 0 或从 0 设置为 359 的最佳方法是什么?是否有更适合这种类型旋转的小部件?
AnimatedRotation(
duration: const Duration(milliseconds: 250),
turns: -heading / 360.0,
curve: Curves.linear,
Run Code Online (Sandbox Code Playgroud)
尝试通过添加差异而不是分配角度来做到这一点,但如果它沿同一方向旋转,它可能会溢出。
if(previousHeading - heading > 180) {
turns += ((360.0 - previousHeading) + heading) / 360.0;
}
else if(previousHeading - heading < -180) {
turns -= ((360.0 - heading + previousHeading)) / 360.0;
}
else {
turns += ((previousHeading - heading) / 360.0);
}
previousHeading = heading;
Run Code Online (Sandbox Code Playgroud)
小部件:
AnimatedRotation(
turns: turns,
duration: const Duration(milliseconds: 250),
child: const Icon(Icons.arrow_upward_outlined),
)
Run Code Online (Sandbox Code Playgroud)
要获得正确的“转弯”值,您应该这样做:
double prevValue = 0.0;
FlutterCompass.events?.listen((CompassEvent event) {
double? direction = event.heading;
direction = direction < 0 ? (360 + direction): direction;
double diff = direction - prevValue;
if(diff.abs() > 180) {
if(prevValue > direction) {
diff = 360 - (direction-prevValue).abs();
} else {
diff = 360 - (prevValue-direction).abs();
diff = diff * -1;
}
}
turns += (diff / 360);
prevValue = direction;
});
Run Code Online (Sandbox Code Playgroud)
我希望这可以为其他人节省一些时间;)
| 归档时间: |
|
| 查看次数: |
1565 次 |
| 最近记录: |