与地图交互
5.1 相机、缩放与范围适配
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(21.67623, 100.02228), 17));
map.animateCamera(CameraUpdateFactory.zoomTo(18), 300, null);
LatLngBounds bounds = LatLngBounds.builder()
.include(new LatLng(21.67623, 100.02228))
.include(new LatLng(21.68, 100.03)).build();
map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 24, 80, 24, 220));
四边距顺序为左、上、右、下。适配范围前确保控件已布局且可用宽高大于边距总和。动画时长 1–60000 毫秒,回调为 SukhaMap.CancelableCallback 或 null;stopAnimation() 取消动画。
5.2 控件与手势
UiSettings ui = map.getUiSettings();
ui.setCompassEnabled(true);
ui.setZoomControlsEnabled(true);
ui.setScaleControlsEnabled(true);
ui.setMyLocationButtonEnabled(true);
ui.setRotateGesturesEnabled(true);
ui.setTiltGesturesEnabled(false);
setAllGesturesEnabled 控制全部手势,setScrollGesturesEnabled、setZoomGesturesEnabled 可分别控制。显示定位按钮不等于已获得定位权限或真实位置。
5.3 地图与覆盖物事件
map.setOnMapClickListener(point -> report(point));
map.setOnMarkerClickListener(marker -> { report(marker.getId()); return true; });
map.setOnInfoWindowClickListener(marker -> report(marker.getId()));
map.setOnCameraChangeListener(new SukhaMap.OnCameraChangeListener() {
public void onCameraChange(CameraPosition p) { report(p.target); }
public void onCameraChangeFinish(CameraPosition p) { report(p.zoom); }
});
map.setOnMapTouchListener(event -> report(event.getActionMasked()));
同种 setter 会替换旧监听,传 null 解绑。Marker 点击返回 true 表示业务已处理。MotionEvent 仅在回调内使用,回调后回收。触摸监听是观察接口,不用于拦截手势。另有地图长按、Marker 拖拽与截图等接口,详见接口索引。