专栏首页葬爱家族Android高德之旅(3)UI Setting

Android高德之旅(3)UI Setting

废话

前两篇讲到了地图的基础显示和地图类型,今天来记录下高德地图交互相关的设置。地图的触摸事件很丰富,有单击、双击、单指拖拽、双指拖拽、双指旋转、双指缩放等,高德提供了api来设置这些用户交互,还包含地图截图,这也算是用户交互。好了,废话不多说,开始今天的Android高德之旅。

开车

先来看一张图,这是默认的样子

显示设置

1、指南针:在左上角显示

mUiSettings = aMap.getUiSettings();
mUiSettings.setCompassEnabled(true);

2、比例尺:在左下角显示

mUiSettings = aMap.getUiSettings();
mUiSettings.setScaleControlsEnabled(true);

3、缩放控件:右下角

mUiSettings = aMap.getUiSettings();
mUiSettings.setZoomControlsEnabled(true);

这个位置不是固定的,可以设置

mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM) //左下角
mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER) //左中间

6、设置logo位置:默认在左下角

mUiSettings = aMap.getUiSettings();
mUiSetting.setLogoPosition(int);

这里写图片描述

这个logo是不可以去掉的,必须显示,因为毕竟你用别人的SDK,总得把别人体现出来。 系统提供了6种logo的位置:

mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_LEFT);
mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_BOTTOM);
mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_RIGHT);
mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);
mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_RIGHT);
mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_CENTER);

但是实际运行后发现,6个值只有三个位置。 LOGO_MARGIN_LEFT 和 LOGO_POSITION_BOTTOM_LEFT是一样的 LOGO_MARGIN_RIGHT 和 LOGO_POSITION_BOTTOM_RIGHT是一样的 LOGO_MARGIN_BOTTOM 和 LOGO_POSITION_BOTTOM_CENTER是一样的

这就尴尬了~难道是我打开的方式不对嘛,知道的可以跟我说一下。

7、获取缩放比例

float scale = aMap.getScalePerPixel();

获取出来的这个scale单位是米/像素,也就是屏幕上一像素等于实际多少米

触控设置

1、滑动手势:是否可以单指滑动

mUiSettings.setScrollGesturesEnabled(false);

2、缩放手势:是否可以双指缩放

mUiSettings.setZoomGesturesEnabled(false);

3、倾斜手势:是否可以双指倾斜

mUiSettings.setTiltGesturesEnabled(false);

4、旋转手势:是否可以双指旋转

mUiSettings.setRotateGesturesEnabled(false);

5、所有手势开关

mUiSettings.setAllGesturesEnabled (false);

6、以上四个手势设置api,对应下面4个状态获取api

UiSettings.isRotateGesturesEnabled()
UiSettings.isZoomGesturesEnabled()
UiSettings.isScrollGesturesEnabled()
UiSettings.isTiltGesturesEnabled()

视角改变

大家还记得吗,第一篇最后,我们做了一个小效果,单击地图,地图定位到某个地方,然后视角倾斜60度,并且地图旋转90度。

aMap.animateCamera(
    CameraUpdateFactory.newCameraPosition(new CameraPosition(
                new LatLng(39.92463, 116.389139), //经纬度
                16, //缩放级别 3 -19 3:最大视角,看到全中国,19:最小级别,看到细节
                60, //视角从垂直于地面,向下倾斜60度,此时与地面夹角是30度
                90) //地图顺时针旋转90度
        ),
        1500,
        new AMap.CancelableCallback() {
            @Override
            public void onFinish() {

            }

            @Override
            public void onCancel() {

            }
        }
);

调用aMap.animateCamera,这个过程就是动画形式的,还有另外一个没有动画的api

aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(
        new LatLng(39.92463, 116.389139), //经纬度
            16, //缩放级别 3 -19 3:最大视角,看到全中国,19:最小级别,看到细节
            60, //视角从垂直于地面,向下倾斜60度,此时与地面夹角是30度
            90) //地图顺时针旋转90度
    ));

结果和上面一样,只是这个api不会有动画,从方法名就能看出来。

两个api传入的参数都是CameraUpdate对象,表示更新相机位置(即视角位置) CameraUpdateFactory.newCameraPosition()方法就是返回一个CameraUpdate子类对象

参数分别表示:新的经纬度、缩放级别、视角倾斜角度、地图旋转角度

我们再来看下效果:

newCameraPosition()方法可以一次性设置多个属性,如果我只要缩放一下,就没必要用这个方法

这个方法就可以简单的实现缩放

aMap.animateCamera(CameraUpdateFactory.zoomTo(16));

边界限制

这个api是一个比较新的api,你先定义好东北、西南两个点的坐标,然后地图根据这两个点限制的范围,自动显示地图。

LatLng northeastLatLng = new LatLng(40.159453, 116.767834);
LatLng southwestLatLng = new LatLng(39.674949, 115.932873);
LatLngBounds latLngBounds = new LatLngBounds(southwestLatLng, northeastLatLng);
aMap.setMapStatusLimits(latLngBounds);

地图截图

这个就简单了,就是一个api,调用一下。

aMap.getMapScreenShot(new AMap.OnMapScreenShotListener() {
    @Override
    public void onMapScreenShot(Bitmap bitmap) {
        Log.e("TAG", "回调1");
    }

    @Override
    public void onMapScreenShot(Bitmap bitmap, int i) {
        Log.e("TAG", "回调2");
        ivResult.setImageBitmap(bitmap);
        if(i == 0) {
            Log.e("TAG", "地图渲染未完成,截屏有网格");
        } else {
            Log.e("TAG", "地图渲染完成,截屏无网格");
        }
    }
});

它有两个回调,第二个回调多一个参数,两个会调都是会走的,但是第二个回调多了一个状态参数。 0 表示截图那一刻,地图还没渲染好 非0 表示截图那一刻地图已经渲染好了

完成

好了,今天要记录的就是这些,下篇博客会讲到我的位置:蓝点定位。

本期节目就到这里,感谢大家的收看,我们下期再见~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android高德之旅(5)室内地图废话开关室内地图总结

    大公爵
  • Mvvm、RxJava、Retrofit 三剑合璧

    说起现在Android流行的app架构,脱口而出MVP、MVVM,要问两者区别,张口就来,balabalabala。。但是公司所有项目用的都是MVP,从没正式用...

    大公爵
  • Android Notification

    经常熬夜有三大害处:第一,记忆力越来越差;第二,数学水平下降;第四,记忆力越来越差。

    大公爵
  • 机器学习特性缩放的介绍,什么时候为什么使用

    在这篇文章中,我们将讨论什么是特征缩放以及为什么我们在机器学习中需要特征缩放。我们还将讨论数据的标准化,以及使用scikit-learn实现同样的标准化。

    deephub
  • 排序算法(六):希尔排序

    希尔排序是对插入排序的一种改进,也叫递减增量排序,算法过程中通过对增量值的递减调整,形成每一个增量值对应的一个或多个待排序分组,分别对分组执行插入排序,最后调整...

    zhipingChen
  • 产品标准化在MES项目实施中的价值

    当“工业4.0革命”和“智能制造2025”的号角吹响之后,不管是老牌的MES软件厂商或者MES后起之秀都觉得终于盼来了“MES的春天”。当然,在国家政策和国际大...

    华磊迅拓
  • 一年股价飙涨两倍,英伟达今年为啥爆款频出?

    下一个技术的大事件是什么?当爱丁堡基金公司投资经理Paulina Sliwinska在硅谷寻求答案时,她并没有在炙手可热的初创公司23岁创始人身上找到答案,反而...

    GPUS Lady
  • etl调度工具必备的10个功能属性

    taskctl是一款国内开源的ETL工具,纯C编写,可以在Window、Linux、Unix上运行。

    taskctl官方频道
  • python提取文件名改进

       昨天晚上遇到的问题今天好好想了下,可以用正则表达式判断下文件名里是否有".",没有的话就是目录,需要进入目录再次遍历。今天工作比较累,直接贴代码了。

    py3study
  • 谷歌出品EfficientNet:比现有卷积网络小84倍,比GPipe快6.1倍

    目前提高CNN精度的方法,主要是通过任意增加CNN深度或宽度,或使用更大的输入图像分辨率进行训练和评估。

    新智元

扫码关注云+社区

领取腾讯云代金券