📜  图标:BitmapDescriptor.fromAssetImage 颤动 (1)

📅  最后修改于: 2023-12-03 15:37:16.794000             🧑  作者: Mango

使用 BitmapDescriptor.fromAssetImage 创建颤动图标

在 Flutter 中,我们可以使用 BitmapDescriptor.fromAssetImage 创建自定义图标。在某些情况下,我们可能想要在点击图标时添加颤动效果,以提供更好的视觉反馈。

下面是如何使用 BitmapDescriptor.fromAssetImage 创建颤动图标的步骤:

1. 导入相关库

首先,我们需要在我们的 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;
2. 创建颤动图标

接下来,我们需要创建颤动图标。我们可以通过以下步骤创建:

  1. 使用 BitmapDescriptor.fromAssetImage 加载图标文件。
  2. 使用 BitmapDescriptor.toSvgString 转换图标为 SVG 格式。
  3. 使用 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

3. 在地图上添加颤动图标

最后,我们需要将颤动图标添加到地图上。我们可以使用 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])
      ],
    ),
  );
}

现在,当我们在地图上点击颤动图标时,它将以颤动的方式旋转。