伙计们,我构建了一个具有SupportMapFragment的片段我希望能够拖动地图并检测相机正在显示的新“区域”,这样我就可以在该区域内加载我的标记。
((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
在mapReadycall上我添加了一个onCameraChangeListener:
@Override
public void onMapReady(GoogleMap googleMap) {
googleMap.getUiSettings().setZoomControlsEnabled(false);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
showItemsinMap(cameraPosition.target.latitude, cameraPosition.target.longitude);
}
});
}
我的地图上有另一个功能,我可以在它上面拖动一个多边形,并使用getProjection方法获取区域内的标记:
LatLng latLng = map.getProjection()。fromScreenLocation(x_y_points);
其中x_y_points是屏幕上的x,y坐标,然后我创建一个多边形并添加获取SW,SE,NW和NE点以获得搜索标记的区域。
在地图中处理新区域的最佳方法是什么?
答案 0 :(得分:0)
从地图第2版开始的onCameraMoveStarted回调是您启动的关键。
@Override
public void onMapReady(GoogleMap map) {
mMap = map;
mMap.setOnCameraIdleListener(this);
mMap.setOnCameraMoveStartedListener(this);
mMap.setOnCameraMoveListener(this);
mMap.setOnCameraMoveCanceledListener(this);
// Show Sydney on the map.
mMap.moveCamera(CameraUpdateFactory
.newLatLngZoom(new LatLng(-33.87365, 151.20689), 10));
}
@Override
public void onCameraMoveStarted(int reason) {
if (reason == OnCameraMoveStartedListener.REASON_GESTURE) {
Toast.makeText(this, "The user gestured on the map.",
Toast.LENGTH_SHORT).show();
} else if (reason == OnCameraMoveStartedListener
.REASON_API_ANIMATION) {
Toast.makeText(this, "The user tapped something on the map.",
Toast.LENGTH_SHORT).show();
} else if (reason == OnCameraMoveStartedListener
.REASON_DEVELOPER_ANIMATION) {
Toast.makeText(this, "The app moved the camera.",
Toast.LENGTH_SHORT).show();
}
}