Android 高德地图 动态绘制区域

本文介绍了一种在地图应用中绘制轨迹的方法,通过禁用地图滚动、监听触摸事件、隐藏地图标识等方式来改善用户体验。文中详细解释了如何使用高德地图API进行坐标转换,并实现了两点间的连续绘制效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前存在的问题是绘制的过程中,地图也在跟着刷新,不知道怎么解决,如果有朋友知道留言告诉我,感激不尽

下面说一下我的步骤


1、在绘制的开始时候,设置地图不可移动

uiSettings.setScrollGesturesEnabled(false);

2、监听touchlistener

mAMap.setOnMapTouchListener(new AMap.OnMapTouchListener() {
    @Override
    public void onTouch(MotionEvent motionEvent) {
        if (!mAMap.getUiSettings().isScrollGesturesEnabled()) {//地图不能移动的时候再画线
            switch (motionEvent.getAction()) {
                case MotionEvent.ACTION_DOWN://start点,转换成坐标点
                    int x = (int) motionEvent.getX();
                    int y = (int) motionEvent.getY();
                    latLngStart = toGeoLocation(x, y);
                    trackLatlngList.add(latLngStart);
                    break;
                case MotionEvent.ACTION_MOVE:
                    mAMap.showMapText(false);
                    int x1 = (int) motionEvent.getX();
                    int y1 = (int) motionEvent.getY();
                    latlngMove = toGeoLocation(x1, y1);
                    trackLatlngList.add(latlngMove);
                    if (mDrawedLineList.size() > 1) {
                        mDrawedLineList.remove(0);
                    }
                    mDrawedLineList.add(latlngMove);
                    PolylineOptions polylineOptions = new PolylineOptions().color(Color.RED).addAll
                            (mDrawedLineList);
                    mAMap.addPolyline(polylineOptions);
                    Log.e("画线",mDrawedLineList.size() + "");
                    //画线
                    break;
                case MotionEvent.ACTION_UP:
                    mAMap.showMapText(true);
                    uiSettings.setScrollGesturesEnabled(true);
                    Toast.makeText(TrackActivity.this,"绘制完成",Toast.LENGTH_SHORT).show();
                    //自动收尾相连
                    trackLatlngList.add(latLngStart);
                    PolylineOptions polylineOptions1 = new PolylineOptions().color(Color.RED).addAll
                            (trackLatlngList);
                    mAMap.addPolyline(polylineOptions1);
                    break;
            }
        }
    }
});
里面有两个注意的点,

1.在move的时候,隐藏地图标识,showMapText(false),这也是因为地图跟着刷新,这样看着好一点

2.在绘制的时候保证两个点两个点的绘制

3.在绘制完成后,将第一个点添加到list里面,在up的时候自动连接上

4.忘记了一个,这个是屏幕坐标点和实际的转换,高德自带的api

private LatLng toGeoLocation(int x, int y) {
        if (AMapUtil.IsEmptyOrNullString(x + "") || AMapUtil.IsEmptyOrNullString(y + "")) {
            return null;
        } else {
            mPoint = new Point(x, y);
            LatLng mLatlng = mAMap.getProjection().fromScreenLocation(mPoint);
            if (mLatlng != null) {
                return mLatlng;
            }
            return null;
        }
    }


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值