跳过导入高德地图,导入包,直接到使用
一、在Activity中使用
1、在布局中使用mapview
<com.amap.api.maps.MapView
android:id="@+id/amapView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#fff"
android:clickable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/estimate_payment" />
2、在Actvity中初始化地图
遇到过的问题:
(1)没有在onCreate中调用MapView.onCreate,导致地图是空白
(2)onPause里使用了MapView.OnPause,onResume里没有使用MapView.OnResume,导致mapview卡住一动不动(移动地图,缩放手势都不起作用)
(3)隐藏精度圈、缩放按钮、自定义定位蓝点(https://lbs.amap.com/api/android-sdk/guide/interaction-with-map/control-interaction)
(4)自定义定位button:因为高德地图没有提供替换定位button的方法,所以需要将原本地图的定位button隐藏,添加自定义的button,点击之后执行定位。(http://lbsbbs.amap.com/forum.php?mod=viewthread&tid=14167)
(5)弹出popupwindow时设置背景变暗,mapView上面重叠部分的view被穿透。低版本上mapView整个就没有变暗。这个问题只要将mapView换成TextureMapView就可以了。官网上有个解释mapView与TextureMapView区别的:mapView是GLSurfaceView,与其他GLSurfaceView叠加会出现穿透现象,不知道我这边的问题是不是同一个原因。虽然TextureMapView效率比MapView低,但是我暂时没有找到更好的解决方法。(https://lbs.amap.com/api/android-sdk/guide/create-map/show-map)
问题图:
最终效果:
@InjectView(R.id.amapView)
MapView mBmapView;
//声明AMapLocationClient类对象
private AMapLocationClient mLocationClient = null;
//声明AMapLocationClientOption对象
private AMapLocationClientOption mLocationOption = null;
private AMap mAmap;
private static final int MAP_ZOOM_SIZE = 18;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mBmapView.onCreate(savedInstanceState);
}
@Override
protected void onPause() {
if (mBmapView != null) {
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mBmapView.onPause();
}
if (mLocationClient != null) {
mLocationClient.stopLocation();
}
super.onPause();
}
@Override
protected void onResume() {
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mBmapView.onResume();
if (mLocationClient != null) {
mLocationClient.startLocation();
}
super.onResume();
}
@Override
protected void onDestroy() {
LogUtils.i("onDestroy");
clearRouteLines();
if (mLocationClient != null) {
mLocationClient.stopLocation();
}
if (mBmapView != null) {
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mBmapView.onDestroy();
}
super.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mBmapView.onSaveInstanceState(outState);
}
private void initMap() {
if (mAmap == null) {
mAmap = mBmapView.getMap();
}
//设置希望展示的地图缩放级别
CameraUpdate mCameraUpdate = CameraUpdateFactory.zoomTo(MAP_ZOOM_SIZE);
mAmap.moveCamera(mCameraUpdate);
//自定义定位蓝点:
MyLocationStyle myLocationStyle = new MyLocationStyle();
myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.location_indicator));
//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);
//设置精度圆圈(隐藏精度圈)
myLocationStyle.strokeCol