在带有标记的 flutter 中使用 Google 地图时。与 iOS 相比,Android 中的标记将具有更大的触摸目标。
通常在 iOS 上,触摸目标本身就是标记,而 Android 会在触摸目标周围添加填充,以使其更易于点击。如上图所示,如果我想让iOS标记更容易点击并创建带有填充的图像,就会出现问题。那么 Android 标记将会有太多的填充,导致彼此靠近的标记出现许多误点击。
一个解决方案是为 Android 和 iOS 使用不同的图标,但我想知道是否有更好的解决方案,例如关闭 Android 提供的额外填充。另外,如果标记彼此靠近且不重叠,如何避免点击错误?
在这里您可以找到更多信息。 这是报告的一个老问题。 链接: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();
}
这里有更多信息: