📅  最后修改于: 2023-12-03 15:37:16.794000             🧑  作者: Mango
在 Flutter 中,我们可以使用 BitmapDescriptor.fromAssetImage
创建自定义图标。在某些情况下,我们可能想要在点击图标时添加颤动效果,以提供更好的视觉反馈。
下面是如何使用 BitmapDescriptor.fromAssetImage
创建颤动图标的步骤:
首先,我们需要在我们的 Flutter 项目中导入相关库。在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
flutter:
sdk: flutter
flutter_map: ^0.13.0
vector_math: ^2.1.0
在我们的 Dart 代码中,我们需要导入以下库:
import 'package:flutter_map/flutter_map.dart';
import 'package:vector_math/vector_math.dart' as vector;
接下来,我们需要创建颤动图标。我们可以通过以下步骤创建:
BitmapDescriptor.fromAssetImage
加载图标文件。BitmapDescriptor.toSvgString
转换图标为 SVG 格式。flutter_map
库中的 Marker
类创建颤动图标。我们可以使用 Marker.rotate
属性设置颤动角度。下面是实现代码:
BitmapDescriptor trembleIcon;
String iconPath = "assets/icons/map_marker.png";
Future<Null> loadIcons() async{
trembleIcon = await BitmapDescriptor.fromAssetImage(
ImageConfiguration(devicePixelRatio: 2.5),
iconPath,
);
}
final trembleMarker = Marker(
width: 40.0,
height: 40.0,
point: LatLng(37.7749, -122.4194),
builder: (ctx) => Container(
child: Transform.rotate(
angle: vector.radians(20),
child: Icon(
IconData(0xf041, fontFamily: 'Fontello'),
color: Colors.yellow,
size: 30.0,
),
),
),
);
值得注意的是,我们不直接使用创建的 BitmapDescriptor
,而是将其转换为 IconData
,然后使用 Transform.rotate
旋转 Icon
。
最后,我们需要将颤动图标添加到地图上。我们可以使用 flutter_map
库中的 MarkersLayer
类将 trembleMarker
添加到地图上。
下面是实现代码:
MapController mapController = MapController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: FlutterMap(
mapController: mapController,
options: MapOptions(
center: LatLng(37.7749, -122.4194),
zoom: 14.0,
),
layers: [
TileLayerOptions(
urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
subdomains: ['a', 'b', 'c'],
),
MarkerLayerOptions(markers: [trembleMarker])
],
),
);
}
现在,当我们在地图上点击颤动图标时,它将以颤动的方式旋转。