【移动端】Flutter 自定义高德地图比例尺

背景

因为高德地图本身的比例尺是默认只能在左下角展示,且样式不能调整,所以在实际开发中会有自定义比例尺的需求

通过阅读源码和开发文档会发现,针对Flutter ,高德地图并未开放自定义比例尺的接口

分析

通过阅读源码和AMap Android SDK源发现,在AMap类中存在getScalePerPixel方法可以获取比例尺数据,所以现在需要解决的是获取AMap类的实例,获取方法可以参考上篇文章:

【移动端】Flutter 获取Android AMap实例

获取后的问题的来了,就是计算比例尺数据,终端设备屏幕的像素一般分为物理像素和逻辑像素,阅读源码会发现getScalePerPixel获取的实际是逻辑像素,所以下面需要计算逻辑像素

比如计算1cm下设备对应的逻辑像素值:

  1. 获取像素比也就是PDI:

PDI:表示1逻辑像素对应多少物理像素

dart 复制代码
double pixelRatio = View.of(context).devicePixelRatio;
  1. 获取物理像素值:
dart 复制代码
Size physicalSize = View.of(context).physicalSize;
  1. 计算1cm对应的逻辑像素值:

2.54 : 代表1英寸,1英寸等于2.54厘米

所以这里需要计算1cm的物理像素值,然后再除于PDI就等于1cm下的逻辑像素值

dart 复制代码
double pixelsPerCentimeter =
        physicalSize.width / 2.54 / pixelRatio * centimeters;

注意

  1. getScalePerPixel`` 获取的单位是m/px`,像素是逻辑像素
相关推荐
穆梓兰煊11 小时前
Flutter端云协同推理架构解析
flutter·github
FungLeo14 小时前
成为全栈·Flutter App 篇·内置 WebView:网页历史、App 返回与外链安全
flutter·网络安全·移动开发·webview·路由管理·成为全栈
m0_7381858216 小时前
Flutter 鸿蒙化实战:volume_controller 适配 OpenHarmony,系统音量控制
flutter·华为·harmonyos·鸿蒙
FungLeo16 小时前
成为全栈·Flutter App 篇·Flutter Markdown 阅读器:支持范围与渲染边界
flutter·markdown·dart·代码高亮·成为全栈·移动阅读
m0_7381858216 小时前
Flutter 鸿蒙化实战:webview_cookie_manager 适配 OpenHarmony,WebView Cookie 管理
flutter·华为·harmonyos·鸿蒙
FungLeo17 小时前
成为全栈·Flutter App 篇·服务端目录与文章辅助阅读:锚点、上下篇、浏览量和阅读历史
flutter·锚点·阅读体验·成为全栈·markdown目录·api契约
恋猫de小郭18 小时前
Flutter Android 改动:APK 不再允许通过 Intent 动态修改 Engine 参数
android·前端·flutter
小 黄 鸡1 天前
Flutter 面试必会知识点详解(从基础到进阶)
flutter·面试·职场和发展
大龄秃头程序员1 天前
Flutter 最少代码验证:为什么子 Isolate 调原生,一定要先回到主 Isolate?
flutter
FungLeo1 天前
成为全栈·Flutter App 篇·分类、标签与搜索:移动端内容发现
flutter·移动开发·标签·搜索·分类管理·成为全栈