继上文我们继续撸代码,读完本文你将不用看官网代码,直接拷贝至项目即可完成高德至地图定位。
最终效果图1:选择日历选择日期,其中有下标的日期是有数据的,点击显示当天地图上的数据
效果图2: 生成marker并显示详情
由于不能上传2M以上的截图,只录了重点,废话不多讲,速度上车。
定位需要加上dependencies
compile 'com.amap.api:location:latest.integration'
首先先完成布局:
<com.amap.api.maps2d.MapView
android:id="@+id/mv_mapview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
接下来在类中撸代码
在类中实现以下
:
implements AMapLocationListener, LocationSource
接下来在初始化的时候设置地图:
if (aMap == null)
{
aMap = mv_mapview.getMap();
map_setting = aMap.getUiSettings();
aMap.setLocationSource(this);// 设置定位监听
aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
}
map_setting.setScaleControlsEnabled(true);
map_setting.setCompassEnabled(false);
map_setting.setScrollGesturesEnabled(true);
map_setting.setZoomGesturesEnabled(true);
MyLocationStyle myLocationStyle = new MyLocationStyle();
myLocationStyle.myLocationIcon(BitmapDescriptorFactory.
fromResource(R.mipmap.ic_local)); // 图标以及样式颜色等定制
myLocationStyle.strokeColor(STROKE_COLOR);
myLocationStyle.strokeWidth(5);
myLocationStyle.radiusFillColor(FILL_COLOR);
aMap.setMyLocationStyle(myLocationStyle);
由于我们实现了两个定位监听的接口,因此,下面只需要在对应的方法内实现我们的逻辑即可:
/**
* 定位成功后回调函数
*/
@Override
public void onLocationChanged(AMapLocation amapLocation)
{
if (mListener != null && amapLocation != null)
{
if (amapLocation != null && amapLocation.getErrorCode() == 0)
{
mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
animMove(aMap, amapLocation);
} else
{
MainActivity.instant.showToast("定位失败,请检查权限!");
}
deactivate();
}
}
/**
* 激活定位
*/
@Override
public void activate(OnLocationChangedListener listener)
{
mListener = listener;
if (mlocationClient == null)
{
mlocationClient = new AMapLocationClient(mActivity);
mLocationOption = new AMapLocationClientOption();
mlocationClient.setLocationListener(this);
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mlocationClient.setLocationOption(mLocationOption);
mlocationClient.startLocation();
}
}
/**
* 停止定位
*/
@Override
public void deactivate()
{
mListener = null;
if (mlocationClient != null)
{
mlocationClient.stopLocation();
mlocationClient.onDestroy();
}
mlocationClient = null;
}
附:需要在地图其他生命周期调用地图的生命周期
@Override
public void onPause()
{
super.onPause();
mv_mapview.onPause();
}
@Override
public void onDestroyView()
{
super.onDestroyView();
mv_mapview.onDestroy();
aMap.clear();
unbinder.unbind();
deactivate();
}
@Override
public void onResume()
{
super.onResume();
mv_mapview.onResume();
}
接下来,点击地图右上角的定位图标,就会有奇迹出现。