gpt4 book ai didi

android - 为移动目标 lat/lng 和缩放级别的动画偏移 map fragment 的中心

转载 作者:IT王子 更新时间:2023-10-28 23:44:48 25 4
gpt4 key购买 nike

我的 UI 有一个 MapFragment,上面覆盖了一个透明的 View。 map 占据了整个屏幕,而 View 只是屏幕的左三分之一。结果, map 的默认“中心”处于关闭状态。当有人点击一个标记时,我想将该标记置于 MapFragment 的完全可见区域的中心(而不是 MapFragment 本身的中心)。

因为这很难用文字来形容,所以让我用几张图片。假设我的 UI 是这样的:

Default Map

当用户点击一个标记时,我想将它居中放大以更近地看到它。无需任何调整,您将获得以下效果:

Map with incorrectly centered marker

我想要的是使标记居中,但在右侧的空间中,如下所示:

Map with correctly centered marker

如果您不使用 map 的投影更改缩放级别,则很容易实现这一壮举:

// Offset the target latitude/longitude by preset x/y ints
LatLng target = new LatLng(latitude, longitude);
Projection projection = getMap().getProjection();
Point screenLocation = projection.toScreenLocation(target);
screenLocation.x += offsetX;
screenLocation.y += offsetY;
LatLng offsetTarget = projection.fromScreenLocation(screenLocation);

// Animate to the calculated lat/lng
getMap().animateCamera(CameraUpdateFactory.newLatLng(offsetTarget));

但是,如果您同时更改缩放级别,则上述计算不起作用(因为 lat/lng 偏移量会在不同缩放级别发生变化)。

让我列出尝试修复的列表:

  • 快速更改缩放级别,进行计算,缩放回原始相机位置,然后制作动画。不幸的是,突然的相机变化(即使只是瞬间)非常明显,我想避免闪烁。

  • 将两个 MapFragment 叠加在一起,一个进行计算,另一个显示。我发现 MapFragment 并不是真正构建为相互叠加的(这条路线存在不可避免的错误)。

  • 通过缩放级别的平方差来修改屏幕位置的 x/y。理论上这应该可行,但它总是偏离很多(~.1 纬度/经度,这足以偏离)。

即使缩放级别发生变化,有没有办法计算 offsetTarget?

最佳答案

播放服务库的最新版本添加了 setPadding() GoogleMap 的函数。此填充将所有相机移动投影到偏移 map 中心。 This doc进一步解释了 map 填充的行为方式。

这里最初提出的问题现在可以通过添加与左侧布局宽度相等的左侧填充来解决。

mMap.setPadding(leftPx, topPx, rightPx, bottomPx);

关于android - 为移动目标 lat/lng 和缩放级别的动画偏移 map fragment 的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com