Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
巧妙的Android谷歌地图缩放,同时保持中心点_Android_Google Maps_Zooming_Android Mapview_Google Maps Android Api 2 - Fatal编程技术网

巧妙的Android谷歌地图缩放,同时保持中心点

巧妙的Android谷歌地图缩放,同时保持中心点,android,google-maps,zooming,android-mapview,google-maps-android-api-2,Android,Google Maps,Zooming,Android Mapview,Google Maps Android Api 2,解释我的问题并不容易,但我会努力的 我有一个安卓谷歌地图,在它上面,我有一个图像视图,一直位于它的中心。如果我拖动/平移地图,大头针将始终位于谷歌地图的中心 现在,我在地图上的某个地方添加一个标记。我希望缩放,使中心点保持在地图的中心,标记在地图中可见,并达到最高的缩放级别 问题是,如果我只是检查标记是否在地图边界内,然后继续放大/缩小,直到它在地图边界内,这个过程将始终重复,即尝试放大,如果标记变为外部,则缩小 问题是我依赖于OnCameraChange侦听器,每当我放大或缩小时,它都会不断调

解释我的问题并不容易,但我会努力的

我有一个安卓谷歌地图,在它上面,我有一个图像视图,一直位于它的中心。如果我拖动/平移地图,大头针将始终位于谷歌地图的中心

现在,我在地图上的某个地方添加一个标记。我希望缩放,使中心点保持在地图的中心,标记在地图中可见,并达到最高的缩放级别

问题是,如果我只是检查标记是否在地图边界内,然后继续放大/缩小,直到它在地图边界内,这个过程将始终重复,即尝试放大,如果标记变为外部,则缩小

问题是我依赖于OnCameraChange侦听器,每当我放大或缩小时,它都会不断调用自己,因此,放大/缩小的过程将无限期地发生

journeyGoogleMap.setOnCameraChangeListener(new OnCameraChangeListener()
{
   @Override
   public void onCameraChange(final CameraPosition position)
   {
基本上,我需要的是一个函数,我可以提供中心LatLng和markerLatLng,它将自动计算LatLngBounds,确保我的中心位于LatLng边界的中心,然后我可以简单地使用

public static CameraUpdate newLatLngBounds (LatLngBounds bounds, int width, int height, int padding)
如下面的链接所示 ,int,int)


如果您需要更多的说明,请告诉我使用
googleMap.getProjection().getVisibleRegion()
将屏幕的所有四个角作为
LatLng
值形成梯形。计算梯形与通过中心和标记绘制的线相交的位置。比例因子为(从中心到标记的距离/从中心到交点的距离)。现在只需用这个相对于中心的比例因子来缩放梯形。这是新的雷吉森


您也可以使用
getVisibleRegion().latLngBounds
来简化计算,但请注意,返回矩形的某些区域实际上是不可见的。

使用
googleMap.getProjection().getVisibleRegion()
将屏幕的所有四个角作为
LatLng
值形成梯形。计算梯形与通过中心和标记绘制的线相交的位置。比例因子为(从中心到标记的距离/从中心到交点的距离)。现在只需用这个相对于中心的比例因子来缩放梯形。这是新的雷吉森


您也可以使用
getVisibleRegion().latLngBounds
简化计算,但请注意,返回矩形的某些区域实际上不可见。

您需要从两点计算
latLngBounds

  • 你的标记位置和
  • 放置在当前中心的另一侧
  • 第二个是这样计算的:

    LatLng other = new LatLng(2 * center.latitude - position.latitude, 2 * center.longitude - position.longitude);
    

    有关一般解决方案,请参见。

    您需要从两个点计算
    LatLngBounds

  • 你的标记位置和
  • 放置在当前中心的另一侧
  • 第二个是这样计算的:

    LatLng other = new LatLng(2 * center.latitude - position.latitude, 2 * center.longitude - position.longitude);
    

    请参阅以获取一般解决方案。

    不确定如果太晚,请在此处查看我的答案:不确定如果太晚,请在此处查看我的答案: