java - 安卓谷歌地图 : Combine scrollBy with zoomBy for simultaneous pan & zoom

标签 java android google-maps

我想同时缩放和滚动 GoogleMap 对象。不幸的是,如果我只是进行两次 moveCamera 调用(一个接一个),似乎只有第二次调用会生效。

另一种方法是传递 CameraPosition,但不幸的是,CameraPosition 构造函数似乎没有采用处理滚动量的参数(这是缩放级别不变),但只是关于去往哪个纬度/经度的参数。

是否有一些聪明的方法来组合/连接 CameraUpdate 对象,这样我就可以发出一个同时执行平移和缩放的 moveCamera 命令?

我认为这样的事情是可能的,因为您可以在触摸 map 时做到这一点。您放下两根手指,张开手指可以放大/缩小,同时移动两根手指可以平移。

最佳答案

看起来您最好的选择是修改调用 GoogleMap.getCameraPosition() 时返回的 CameraPosition 对象。但是,您不能仅将 CameraPosition 对象的纬度和经度增加滚动的像素数。您必须获取 CameraPosition 的 LatLng 坐标,使用 Projection 类将其转换为 Point 对象,修改 指向,然后将其转换回LatLng 对象。

例如:

GoogleMap map; // This is your GoogleMap object
int dx; // X distance scrolled
int dy; // Y distance scrolled
float dz; // Change in zoom level
float originalZoom;

CameraPosition position = map.getCameraPosition();
Project projection = map.getProjection();

LatLng mapTarget = position.target;
originalZoom = position.zoom;

Point mapPoint = projection.toScreenLocation(mapTarget);
mapPoint.x += dx;
mapPoint.y += dy;
mapTarget = projection.fromScreenLocation(mapPoint);

CameraPosition newPosition = new CameraPosition(position)
                                  .target(mapTarget)
                                  .zoom(originalZoom+dz)
                                  .build();

map.moveCamera(CameraUpdateFactory.newCameraPosition(newPosition));

关于java - 安卓谷歌地图 : Combine scrollBy with zoomBy for simultaneous pan & zoom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912182/

相关文章:

java - 从 Android 中的 Native Java Activity 打开 React Native 组件

ios - 使用 Google map iOS sdk 获取人类可读的地址

javascript - d3.js map 上的跳动标记点

java - tcp 连接卡在 close_wait java

java - "java.compiler"系统属性的可能值

Java Servlet 积极缓存

android - 在运行时更改 string.xml

android - 为什么我的 Android Kotlin 应用程序不请求用户的许可来打开位置?

java - 带有 map 的 fragment : cast issue

java - GLSL 中没有出现纹理的可能原因有哪些?