使用高德地图MapView

跳过导入高德地图,导入包,直接到使用

一、在Activity中使用

1、在布局中使用mapview


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)
问题图:
使用高德地图MapView_第1张图片
最终效果:
使用高德地图MapView_第2张图片

    @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

你可能感兴趣的:(android)