使用高德地图MapView

本文详细介绍了如何在Android应用中使用高德地图MapView,包括在Activity和Fragment中的集成,以及路径规划的实现。重点讨论了初始化地图时的常见问题,如定位、精度圈和缩放按钮的隐藏,自定义定位按钮的实现,以及在PopupWindow中防止地图穿透的问题。此外,还讲解了如何绘制路径、更新marker位置,以及模拟司机沿规划路线移动的技巧。
摘要由CSDN通过智能技术生成

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

一、在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值