5.控制地图
修改上一节的activity_main.xml布局文件,核心代码如下:
01 <fragment xmlns:android="http://schemas.android.com/apk/res/android"
02 xmlns:map="http://schemas.android.com/apk/res-auto"
03 ...
04 class="com.google.android.gms.maps.SupportMapFragment"
05 map:cameraBearing="112.5"
06 map:cameraTargetLat="-33.796923"
07 map:cameraTargetLng="150.922433"
08 map:cameraTilt="30"
09 map:cameraZoom="13"
10 map:mapType="normal"
11 map:uiCompass="false"
12 map:uiRotateGestures="true"
13 map:uiScrollGestures="false"
14 map:uiTiltGestures="true"
15 map:uiZoomControls="false"
16 map:uiZoomGestures="true" />
代码解读
属性说明:
l cameraBearing:基准线设置。
l cameraTargetLat:初始定位的纬度。
l cameraTargetLng:初始定位的经度。
l cameraTilt:设置地图卫星视角。
l cameraZoom:地图缩放级别,跟定位的精确度有关。
l map:mapType:设置地图类型。
l uiZoomControls,uiCompass:设置缩放控件,指南针控件是否显示。
l uiZoomGestures,uiScrollGestures,uiRotateGestures,uiTiltGestures:手势的设置,包括缩放手势,滑动手势,旋转手势,和倾斜手势。
l zOrderOnTop:控制子视图是否可以覆盖在窗口之上。
l useViewLifecycle:控制Map视图的生命周期和Fragment的生命周期绑定。
修改MainActivity,核心代码如下:
01 public class MainActivity extends Activity {
02 privateGoogleMap mMap;
03 private MapViewmMapView;
04
05 @Override
06 protected voidonCreate(Bundle savedInstanceState) {
07 super.onCreate(savedInstanceState);
08 GoogleMapOptions options = newGoogleMapOptions();
09 options.mapType(GoogleMap.MAP_TYPE_NORMAL);
10 options.camera(new CameraPosition(
11 newLatLng(32.127084,118.937159), 14, 0, (float)112.5));
12 mMapView =new MapView(this, options);
13 mMapView.setLayoutParams(
14 newLayoutParams(LayoutParams.MATCH_PARENT,
15 LayoutParams.MATCH_PARENT));
16 mMapView.onCreate(savedInstanceState);
17 setContentView(mMapView);
18 mMap =mMapView.getMap();
19 mMap.addMarker(newMarkerOptions().position(new LatLng(32.127084,
20 118.937159)).title("南京信息职业技术学院附近"));
21 UiSettingsus = mMap.getUiSettings();
22 us.setZoomControlsEnabled(false);
23 us.setZoomGesturesEnabled(true);
24 us.setScrollGesturesEnabled(true);
25 us.setCompassEnabled(false);
26 us.setRotateGesturesEnabled(true);
27 us.setTiltGesturesEnabled(true);
28
29 }
30
31 ...
32 }
运行效果如图9-13所示。
图9‑13 添加了标记的地图
6.地图的种类
地图一共有5种类型:
l Normal:典型的地图,此种地图类型是平常使用最多、最广的类型。
l Hybrid:混合卫星图及道路地图,该种地图类型除了显示卫星图外,还标记了地名。
l Satellite:卫星照片。
l Terrain:地形图。
l None:什么都没有。
通常使用如下方式改变地图的类型:
01 GoogleMap mMap = ((MapFragment)getFragmentManager()
02 .findFragmentById(R.id.map)).getMap();
03 mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
对于MapView控件,可以分别通过方法setTraffic(true)、setStreetView(true)和setSatellite(true)来设置地图的交通模式、街景模式和卫星模式。并通过MapView的getZoomControls()方法设置ZoomControls控件的服务对象。如果没有在布局中为ZoomControls设置布局,也可以添加如下代码进行设置:
01 mapView.setBuiltInZoomControls(true);
02 mapView.invalidate();
7.标记地图
标记(Marker)用来标记地图上的某一个地点,可以自定义标记的颜色或图示。标记可以定义点击事件,如果将MarkerOptions的draggable属性设置为true,即可以使得使用者在长按此标记后移动它。
建立标记的方法是使用MarkerOptions类,使用LatLng类可以用于设置标记的经纬度,代码如下:
01 MarkerOptions markerOpt = new MarkerOptions();
02 markerOpt.position(new LatLng(纬度值, 经度值));
03 markerOpt.title("标记地点");
04 markerOpt.draggable(true);
05 mMap.addMarker(markerOpt);
也可以根据需要自定义标记的属性:
l Position(必要的):使用LatLng 类來设定位置,该属性是唯一的必须要设定的属性。
l Title:当用户点击标记时显示的标记的标题信息。
l Snippet:额外的文字,显示在标题信息的下方。
l Draggable:是否可以允许用户移动标记,true:可移动;false:不可移动。
l Visible:是否显示标记,true:显示;false:隐藏。
l Anchor:图片上的一个点,用来定位到经纬度坐标,默认为图片底边的中间位置。取值范围为:左上角(0.0,0.0)到右下角(1.0, 1.0)。
l Icon:图示,被放置在原标记的相同位置,只有第一次建立标记时可以使用图示,一旦使用之后不能任意更换。