Android 高德地图,显示地图,并定位当前的位置
2017-09-13 16:49
741 查看
基本配置,依赖lib,配置权限,配置key等这些这里就不做介绍了
1.首先在布局xml文件中添加地图控件:
2.简述地图生命周期的管理:
3.显示地图
下面是代码
显示小蓝点可以根据自己想要的去做更改详情可以看官方的文档:http://lbs.amap.com/api/android-sdk/guide/create-map/mylocation
1.首先在布局xml文件中添加地图控件:
<com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/>
2.简述地图生命周期的管理:
public class MainActivity extends Activity { MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.map); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制 mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态 mMapView.onSaveInstanceState(outState); } }
3.显示地图
//定义了一个地图view mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。 //初始化地图控制器对象 AMap aMap; if (aMap == null) { aMap = mapView.getMap(); }
下面一个案例
效果图如下:下面是代码
MainActivity
public class MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener { MapView mMapView = null; //初始化地图控制器对象 AMap aMap; //定位需要的数据 LocationSource.OnLocationChangedListener mListener; AMapLocationClient mlocationClient; AMapLocationClientOption mLocationOption; //定位蓝点 MyLocationStyle myLocationStyle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.map); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); if (aMap == null) { aMap = mMapView.getMap(); } //设置地图的放缩级别 aMap.moveCamera(CameraUpdateFactory.zoomTo(12)); // 设置定位监听 aMap.setLocationSource(this); // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false aMap.setMyLocationEnabled(true); // 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种 aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); //蓝点初始化 myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认 4000 也会执行此种模式。 myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style //aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。 aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。 myLocationStyle.showMyLocation(true); aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() { @Override public void onMyLocationChange(Location location) { //从location对象中获取经纬度信息,地址描述信息,建议拿到位置之后调用逆地理编码接口获取 } }); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制 mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态 mMapView.onSaveInstanceState(outState); } //--定位监听--------- /** * 激活定位 */ @Override public void activate(OnLocationChangedListener onLocationChangedListener) { mListener = onLocationChangedListener; if (mlocationClient == null) { //初始化定位 mlocationClient = new AMapLocationClient(this); //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位回调监听 mlocationClient.setLocationListener(this); //设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位参数 mlocationClient.setLocationOption(mLocationOption); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 mlocationClient.startLocation();//启动定位 } } /** * 停止定位 */ @Override public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } //定位回调 在回调方法中调用“mListener.onLocationChanged(amapLocation);”可以在地图上显示系统小蓝点。 @Override public void onLocationChanged(AMapLocation aMapLocation) { if (mListener != null && aMapLocation != null) { if (aMapLocation != null && aMapLocation.getErrorCode() == 0) { mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点 } else { String errText = "定位失败," + aMapLocation.getErrorCode() + ": " + aMapLocation.getErrorInfo(); Log.e("定位AmapErr", errText); } } } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mMapView.onDestroy(); if (null != mlocationClient) { mlocationClient.onDestroy(); } } }
activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.piomap.MainActivity"> <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
显示小蓝点可以根据自己想要的去做更改详情可以看官方的文档:http://lbs.amap.com/api/android-sdk/guide/create-map/mylocation
相关文章推荐
- Android高德地图获取当前地理位置(不显示地图只获取当前位置)
- android,使用高德地图SDk(地图SDK,定位SDK,搜索SDK),显示当前位置以及自定义多个Markers
- Android移动开发-通过自定义算法代码来纠偏地图由GPS定位到的经纬度在地图上显示或解析位置时出现偏移的问题
- (android地图开发) 基于百度Lbs服务定位用户的当前位置
- Android百度地图开发之显示当前位置地图
- 百度地图定位 当前位置和地图显示
- Android初级开发(十)——百度定位—在地图上显示你的位置
- android通过高德地图定位sdk获取当前位置的经纬度(只是经纬度哦)
- (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图
- Android学习历程——高德地图学习开发之显示地图,定位
- (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图
- Android 高德地图 自己位置的显示与点地图上任意一点的坐标
- Android中使用百度API定位,并实现手势操作(显示最后点击地图的位置)
- android ---------高德地图实现定位和3D地图显示
- Android Study 之玩转高德地图一部曲[实现显示地图以及定位功能]
- Android 高德地图定位(获取当前位置)
- (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图
- 使用百度地图SDK定位当前位置并显示在地图上
- Android基于mAppWidget实现手绘地图(十二)–显示当前用户位置
- Android简单实现 高德地图的定位与显示,点击按钮切换地图图层