gpt4 book ai didi

android - 如何在谷歌地图上关注位置,考虑到 View 在它上面?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:19 26 4
gpt4 key购买 nike

背景

假设我有一个 Google map View ,另一个 View 在它上面,覆盖了它的一部分,隐藏了 map 的一些内容。

问题

我需要制作 map 的“相机”,聚焦并在坐标上有一个标记,但让它全部位于 map 可见部分的中间。

像这样:

enter image description here

原始代码集中在(大约)整个屏幕的中心,使标记几乎不可见(因为底部 View 覆盖了它)。

问题是,我找不到将正确值设置为 map 本身的 Y 坐标(意思是纬度)的正确方法。

我尝试过的

我试过,给定底部 View 的高度,以及我放置标记的坐标,来计算增量(但当然不会改变标记本身):

    final float neededZoom = 6.5f;
int bottomViewHeight = bottomView.getHeight();
LatLng posToFocusOn = ...;
final Point point = mMap.getProjection().toScreenLocation(posToFocusOn);
final float curZoom = mMap.getCameraPosition().zoom;
point.y += bottomViewHeight * curZoom / neededZoom;
posToFocusOn = mMap.getProjection().fromScreenLocation(point);
final CameraUpdate cameraPosition = CameraUpdateFactory.newCameraPosition(new Builder().target(posToFocusOn).zoom(neededZoom).build());

遗憾的是,这聚焦在标记之上。

问题

我写的有什么问题吗?我该怎么做才能修复它?

最佳答案

好的,我找到了一个解决方法,我认为它适用于所有设备(在 3 台设备上测试,每台设备的屏幕分辨率和尺寸都不同):

我已经测量了 1 度的变化对标记本身有多少像素(然后转换为 DP)。

据此,我测量了每个 View 的高度,并计算了移动相机所需的增量。

在我的例子中,它是这样的(假设变焦是 6.5f):

    //measured as 223 pixels on Nexus 5, which has xxhdpi, so divide by 3
final float oneDegreeInPixels = convertDpToPixels( 223.0f / 3.0f);
final float mapViewCenter = mapViewHeight / 2.0f;
final float bottomViewHeight = ...;
final float posToFocusInPixelsFromTop = (mapViewHeight - bottomViewHeight) / 2.0f ;// can optionally add the height of the view on the top area
final float deltaLatDegreesToMove = (mapViewCenter - posToFocusInPixelsFromTop) / oneDegreeInPixels;
LatLng posToFocusOn = new LatLng(latitude - deltaLatDegreesToMove, longitude);
final CameraUpdate cameraPosition = CameraUpdateFactory.newCameraPosition(new Builder().target(posToFocusOn).zoom(neededZoom).build());

它奏效了。

不知道是否可以调整以支持任意值的缩放。

关于android - 如何在谷歌地图上关注位置,考虑到 View 在它上面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37987235/

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