更改Google地图偏移中心

11
我试图将用户位置设置在地图上,使其位于屏幕底部的大约三分之一位置,并且在地图旋转时,它将围绕该点旋转。
到目前为止,我最接近实现这一目标的方法是使用 setPadding() 方法,但是,这会导致地图在旋转时出现晃动,因为中心点在实际位置周围有些“漂移”。看起来相当难看。
int mapHeight = mapView.getHeight();
googleMap.setPadding(0, mapHeight / 5, 0, 0);

有没有更好的方法来做这件事?

编辑: 在下面的图片中解释

输入图像描述


也许这可以帮助你:https://dev59.com/3J3ha4cB1Zd3GeqPbOXK#41618422 - Leandro Borges Ferreira
我没有看到这个答案怎么能让我锁定用户的位置到地图中心以外的某个地方。 - Dportology
你能否详细解释一下你试图做什么?也许可以附上图片... - Leandro Borges Ferreira
3个回答

21

你不需要填充

根据您的需要更改地图点X和Y值,您可以在任何时候调用此函数!可能要在onLocationChanged内调用,例如changeOffsetCenter(location.getLatitude(),location.getLongitude());

 public void changeOffsetCenter(double latitude,double longitude) {
            Point mappoint = mGoogleMap.getProjection().toScreenLocation(new LatLng(latitude, longitude));
            mappoint.set(mappoint.x, mappoint.y-100); // change these values as you need , just hard coded a value if you want you can give it based on a ratio like using DisplayMetrics  as well
            mGoogleMap.animateCamera(CameraUpdateFactory.newLatLng(mGoogleMap.getProjection().fromScreenLocation(mappoint)));
        }

输出:

在此输入图片描述


@ZeroOne,你的问题不够清晰,请详细说明一下?你是在问是否可以有一个中心点吗? - Charuක
基本上,如何对多个标记进行重新定位并将它们放在地图底部? - ZeroOne
朋友,这个答案是针对一个中心点而不是多个中心点的。你可以通过在底部选择一个主标记并使用较低的缩放级别(相机没有那么缩放)或者采用一种解决方案,例如在一些位置之间取中心点(LatLng)并将其保持为中心位置。查看这个链接可能会有帮助> https://dev59.com/dZTfa4cB1Zd3GeqPRX2X#35646210 找到一个位置与这个答案无关,但是移动中心点(使用x,y)是我在这里解决的问题 :) - Charuක
我更喜欢这个:mMap.setPadding(leftPx, topPx, rightPx, bottomPx); >>https://dev59.com/KGUo5IYBdhLWcg3w-zei#20671939 - fingerup
你可以使用Point.offset(xOffset, yOffset)来为点添加偏移量,而不是使用Point.set()来设置一个新值。 - Arūnas Bedžinskas
当您尝试从远处导航时,这将导致不准确的位置,更不用说除非您动画相机否则无法实现。 - desgraci

1

0

接受的答案可能是使用 "animateCamera" 函数。它使 "旋转震动" 几乎看不见。所以更容易使用

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

与 mMap.animateCamera 或两次 mMap.moveCamera(在更改方向时)一起使用。第一次 moveCamera 以设备中心为旋转中心,第二次 moveCamera 根据填充设置正确的中心点。

这是一种 hack 方法,因为 Google 还没有考虑 setPadding 的旋转问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接