与 iOS 相比,flutter 中 Google 地图上的标记在 Android 上获得更大的触摸目标

问题描述 投票:0回答:1

在带有标记的 flutter 中使用 Google 地图时。与 iOS 相比,Android 中的标记将具有更大的触摸目标。

android 触摸目标

通常在 iOS 上,触摸目标本身就是标记,而 Android 会在触摸目标周围添加填充,以使其更易于点击。如上图所示,如果我想让iOS标记更容易点击并创建带有填充的图像,就会出现问题。那么 Android 标记将会有太多的填充,导致彼此靠近的标记出现许多误点击。

一个解决方案是为 Android 和 iOS 使用不同的图标,但我想知道是否有更好的解决方案,例如关闭 Android 提供的额外填充。另外,如果标记彼此靠近且不重叠,如何避免点击错误?

android ios flutter google-maps google-maps-markers
1个回答
0
投票

在这里您可以找到更多信息。 这是报告的一个老问题。 链接:https://github.com/flutter/flutter/issues/24865

我刚刚在玩这个。我正在提供图像文件 更高分辨率,iOS 为 @2x 和 @3x,Android 为同等分辨率。 这些文件只是被忽略,只有基本分辨率图像 正在使用中。然后 iOS 会自动缩放图像以获得更高的分辨率 分辨率屏幕,但 Android 不会自动缩放 仅以 1x 的速度显示图标。这就是为什么图标显得更大的原因 iOS 优于 Android。

解决这个问题的一个技巧:

BitmapDescriptor get deliveryIcon {
   bool isIOS = Theme.of(context).platform == TargetPlatform.iOS;
   if (isIOS)
      return BitmapDescriptor.fromAsset('assets/icons/orange_pin.png');
   else
      return BitmapDescriptor.fromAsset('assets/icons/3.0x/orange_pin.png');
}

更好的实现是使用 Uint8List:

Future<Uint8List> getBytesFromAsset(String path, int width) async {
  ByteData data = await rootBundle.load(path);
  ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List(), targetWidth: width);
  ui.FrameInfo fi = await codec.getNextFrame();
  return (await fi.image.toByteData(format: ui.ImageByteFormat.png)).buffer.asUint8List();
}

这里有更多信息:

如何在 Flutter 中更改 Google 地图标记的图标大小?

© www.soinside.com 2019 - 2024. All rights reserved.