nat*_*rio 4 android google-maps google-maps-markers google-maps-android-api-2 android-maps-utils
我有一个 LatLng 点列表,我想将其显示为 Google 地图上的标记。\n我当前正在按以下方式计算适合所有点的相机视图:
\n\n首先,我用所有点计算 LatLngBounds。
\n\nIterator<LatLng> i = items.iterator();\nLatLngBounds.Builder builder = LatLngBounds.builder();\nwhile (i.hasNext()) {\n builder.include(i.next());\n}\nLatLngBounds bounds = builder.build();\nRun Code Online (Sandbox Code Playgroud)然后我使用适当的方法:
\n\nCameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds, padding);\nRun Code Online (Sandbox Code Playgroud)该更新提供了我所有观点的良好视图,并有一些不错的填充。
\n\n问题
\n\nI\xe2\x80\x99d 喜欢对 paddingTop、paddingBottom、paddingLeft 和 paddingRight 应用不同的值。也就是说,我两边都没有任何东西,然后我在顶部有一个浮动工具栏(大约50dp),在底部有一个浮动卡(大约200dp)。
如果我不添加填充,某些点将被顶部工具栏或底部卡片覆盖。
\n\n如果我添加最大填充(200dp),那么顶部、左侧和右侧都会有巨大的间隙。任何想法?
__________________________\n| ___________o__________ |\n| | | |\n| |____________________|o|\n| o |\n| o |\n| o |\n| MAP |\n| o |\n| o |\n| ______________________ |\n| | | |\n|o| | |\n| | |o|\n| |____________________| |\n|____________________o___|\nRun Code Online (Sandbox Code Playgroud)\n\n我现在唯一的想法是,获取以像素为单位的地图宽度,以 Lng 为单位获取地图宽度(未明确定义),找到像素/lng 比率,将所需的填充从像素转换为 lng,然后重新计算 LatLngBounds 添加一个假点(一个对于每一侧)这离我原来的界限很远。
\n小智 6
实际上有一个更简单、更短的解决方案,只需要三行代码。感谢/sf/answers/1955607951/提供解决方案。
首先,将工具栏和底卡尺寸转换为像素。
然后,添加这三行代码:
Run Code Online (Sandbox Code Playgroud)map.setPadding(left, top, right, bottom); map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 0)); map.setPadding(0,0,0,0);
第一行:顶部和底部填充将是您的toolbar and bottom card size plus some extra,左侧和右侧可以是任何填充,只要它看起来不错即可。
第二行:将相机移动/动画到边界,remember to set the padding to 0因为您不需要任何额外的填充,因为您已经在第一行中设置了它。
第三行:设置地图填充back to original padding(我的情况为 0),因为第一行中设置的地图填充是永久的。
就是这样,你就可以了!希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
2316 次 |
| 最近记录: |