Flutter地图标记动画插件google_map_marker_animation的使用
Flutter地图标记动画插件google_map_marker_animation的使用
标题
Flutter地图标记动画插件google_map_marker_animation的使用
内容
- 这个包是flutter_animarker扩展包。
- 我们添加了
onMarkerAnimationListener
以实现从地图上平滑移除多边线的功能。
Google Maps Marker Animation - Overview
- 有时你需要在地图画布上放置一个标记📍,但你还需要平滑地通过Google Maps移动。
- 这个包将帮助你动画化标记的位置变化和更多功能。
- 版本v3.0.0包括许多有用的功能,例如:
- 标记位置动画
- 同时动画多个标记
- 兼容Null-safety
- 覆盖标记位置的涟漪效果
- 标记的旋转或方向的角度(航向/航向)
- 多点线性动画(分段线性近似算法)
- 支持动画曲线和持续时间
- 基于Widget的完全自定义行为
- 动画预热以提高性能
- 有用的
LocationTween
、AngleTween
和PolynomialLocationInterpolator
核心逻辑
Note
- 这个包只动画化标记的变化。地理位置和Google Maps配置超出了这个包的范围。所以在尝试这个包之前,请确保你在Google Map上放置了一个标记或者获取了位置更新。
Screenshots
Example
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter_animarker/flutter_animarker.dart';
class SimpleMarkerAnimationExample extends StatefulWidget {
@override
SimpleMarkerAnimationExampleState createState() => SimpleMarkerAnimationExampleState();
}
class SimpleMarkerAnimationExampleState extends State<SimpleMarkerAnimationExample> {
final markers = <MarkerId, Marker>{};
final controller = Completer<GoogleMapController>();
final stream = Stream.periodic(Duration(seconds: 2), (count) => LatLng(18.488101, -69.957995)).take(4);
@override
void initState() {
stream.forEach((value) => newLocationUpdate(value));
super.initState();
}
void newLocationUpdate(LatLng latLng) {
var marker = RippleMarker(
markerId: MarkerId('MarkerId1'),
position: latLng,
ripple: true,
);
setState(() => markers[MarkerId('MarkerId1')] = marker);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Google Maps Markers Animation Example',
home: Animarker(
curve: Curves.ease,
mapId: controller.future.then<int>((value) => value.mapId), // Grab Google Map Id
markers: markers.values.toSet(),
child: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: LatLng(18.488213, -69.959186), zoom: 15),
onMapCreated: (gController) => controller.complete(gController), // Complete the future GoogleMapController
),
),
);
}
}
Using Ripple Effect
- 你只需要使用标记包装类
RippleMarker
,并设置ripple
标志以便可以控制涟漪状态。
Animarker(
rippleRadius: 0.5, //[0,1.0] range, how big is the circle
rippleColor: Colors.teal, // Color of fade ripple circle
rippleDuration: Duration(milliseconds: 2500), //Pulse ripple duration
markers: <Marker>{
RippleMarker(
markerId: MarkerId('MarkerId1'),
position: LatLng(0, 0),
ripple: true, //Ripple state
),
Marker(
markerId: MarkerId('MarkerId2'),
position: LatLng(0, 0),
),
},
)
Using Rotation
- 标记的旋转可以用于Uber-like或送货应用。航向或航向是标记在地球上移动的方向角度。
Animarker(
useRotation: true, // Actived by default
markers: <Marker>{
Marker(
markerId: MarkerId('MarkerId2'),
position: LatLng(0, 0),
),
},
)
Using Curve and Duration
- 就像正常的Flutter动画一样,你可以设置
Curve
或Duration
来获得期望的效果或结果。非常灵活,对吧?
Animarker(
curve: Curves.bounceInOut,
duration: Duration(milliseconds: 2000),
markers: <Marker>{
Marker(
markerId: MarkerId('MarkerId2'),
position: LatLng(0, 0),
),
},
)
更多关于Flutter地图标记动画插件google_map_marker_animation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter地图标记动画插件google_map_marker_animation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用google_map_marker_animation
插件来实现地图标记动画的一个示例代码。这个插件允许你在Google Maps上创建带有动画效果的标记。
首先,确保你已经在pubspec.yaml
文件中添加了google_map_marker_animation
依赖:
dependencies:
flutter:
sdk: flutter
google_maps_flutter: ^2.x.x # 确保使用兼容的版本
google_map_marker_animation: ^x.x.x # 替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来是一个完整的示例代码,展示如何使用google_map_marker_animation
插件:
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_map_marker_animation/google_map_marker_animation.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MapScreen(),
);
}
}
class MapScreen extends StatefulWidget {
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
final LatLng initialPosition = LatLng(-34.397, 150.644);
GoogleMapController? _controller;
MarkerAnimationController? _markerAnimationController;
@override
void initState() {
super.initState();
// 初始化MarkerAnimationController
_markerAnimationController = MarkerAnimationController(
duration: const Duration(seconds: 2),
curve: Curves.easeInOut,
);
// 启动动画
Future.delayed(Duration.zero, () {
animateMarker();
});
}
void animateMarker() {
if (_controller != null && _markerAnimationController != null) {
_markerAnimationController!.animateMarker(
_controller!,
MarkerId('marker'),
LatLng(-37.8136, 144.9631), // 动画结束位置
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Map Marker Animation'),
),
body: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(
target: initialPosition,
zoom: 11.0,
),
onMapCreated: (GoogleMapController controller) {
_controller = controller;
// 添加初始标记
_controller!.addMarker(
MarkerOptions(
position: initialPosition,
markerId: MarkerId('marker'),
),
);
},
markers: Set.from([
Marker(
markerId: MarkerId('marker'),
position: initialPosition,
),
]),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 添加了
google_maps_flutter
和google_map_marker_animation
依赖。 - 创建了一个
MapScreen
页面,并在其中初始化了Google Map和Marker Animation Controller。 - 当地图创建完成时,我们在地图上添加了一个初始标记。
- 使用
MarkerAnimationController
来启动标记的动画,将其从初始位置移动到新的位置。
请注意,你需要确保你的应用有访问Google Maps API的权限,并在AndroidManifest.xml
和Info.plist
中正确配置了API密钥。
这个示例展示了基本的动画功能,你可以根据需要进一步自定义动画参数(如持续时间、曲线等)以及添加更多的标记和动画效果。