地图对我们来说并不陌生,我相信每个用户的手机上面都会带有地图这个软件的,地图也是我们日常生活中的一部分。当我们到一个陌生的地方的时候,地图的作用就尤其明显。今天我们要说的也是地图,最近我在研究地图的一些功能,由于公司的项目里面使用的第三方为高德的,本人也就研究了一下高德的,研究了几天,虽然功能没有想象中的那么复杂,但是也走了不少弯路。在这里就给大家先介绍一些简单的功能。也是大家比较喜欢离不开的一些功能。自定义Marker很简单,但是有时候为了能够更好地展示一些效果,可能需要加载一些网络上图片,也就是后台返回给我们的图片。刚开始我以为很简单,不就是加载一个图片吗。于是就尝试了一下,没想到的是图片居然没有显示出来。经过一些查询发现,可能是图片加载需要一些时间,这就会造成图片来不及加载出来显示在地图上面。然而当我使用图片加载的监听事件,当图片加载完成再添加到地图上面,一切就解决了。
具体实现的部分代码如下

ImageLoader.getInstance().loadImage(urlList.get(i),new SimpleImageLoadingListener() {@Overridepublic void onLoadingComplete(String imageUri,View view2, Bitmap loadedImage) {super.onLoadingComplete(imageUri, view2,loadedImage);LatLng latLng = new LatLng(l.latitude,l.longitude);View view = LayoutInflater.from(ImageMarkerAty.this).inflate(R.layout.marker, null);RoundImageView imageView = (RoundImageView) view.findViewById(R.id.iv);imageView.setImageBitmap(loadedImage);mark.position(latLng);mark.icon(BitmapDescriptorFactory.fromView(view));aMap.addMarker(mark);}});

下面再说一下关于Marker固定移动地图来实现地位功能,这里面我给他添加了一个popwindow,用来显示当前地位的位置信息。popwindow其实很简单,就是自定义一些布局而已,显示的位置就是根据地图的中心然后测量一下中心Marker的在地图上面的位置(不是我们所说的地理位置而是在布局中的位置)下面就先把popwindow的设置代码展现给大家

View popupWindow_view = getLayoutInflater().inflate(R.layout.pop_scroll, null, false);TextView tv_pop_title = (TextView) popupWindow_view.findViewById(R.id.tv_pop_title);int screenWidth = ScreenUtils.getScreenWidth(this);popupWindow = new PopupWindow(popupWindow_view,(int) (screenWidth * 0.6), LayoutParams.WRAP_CONTENT, true);popupWindow.setTouchable(true);popupWindow.setFocusable(true);popupWindow.setBackgroundDrawable(new BitmapDrawable());// 设置动画效果// popupWindow.setAnimationStyle(R.style.PopupWindowAnimStyle);popupWindow.showAtLocation(tv_center, Gravity.TOP, 0,tv_center.getTop()-165);tv_pop_title.setText("我的位置:" + content);

由于关于marker的固定其实就是把Marker固定在地图的中间,当用手指滑动地图的时候你会发现地图在移动,而Marker确实固定在那里。实现起来很简单,就是获取到地图的中心点设置给marker的位置代码为centerMarker.setPositionByPixels(mapView.getWidth() / 2,mapView.getHeight() / 2);当地图移动的时候会有监听地图移动的,然后当地图移动发生时,Marker的位置也会发生变化,怎么办?很简单就是再次把Marker的位置设置为地图的中心位置,实现代码如下:

@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (aMapLocation != null&& aMapLocation.getAMapException().getErrorCode() == 0) {if (listener != null) {listener.onLocationChanged(aMapLocation);// 显示系统小蓝点}myLocation = new LatLng(aMapLocation.getLatitude(),aMapLocation.getLongitude());fixedMarker();}}private void fixedMarker() {MarkerOptions centerMarkerOption = new MarkerOptions().position(myLocation).icon(chooseDescripter);centerMarker = aMap.addMarker(centerMarkerOption);centerMarker.setPositionByPixels(mapView.getWidth() / 2,mapView.getHeight() / 2);handler.postDelayed(new Runnable() {@Overridepublic void run() {CameraUpdate update = CameraUpdateFactory.zoomTo(17f);aMap.animateCamera(update, 1000, new AMap.CancelableCallback() {@Overridepublic void onFinish() {aMap.setOnCameraChangeListener(MarkerFixedAty.this);}@Overridepublic void onCancel() {}});}}, 1000);}

关于多点聚合就是根据显示地图的缩放来显示Marker在本区域的数量,随着地图的放大Marker的数量增加,当地图缩小的时候Marker是不能重叠的,就需要进行聚合就是把两个Marker何为一个并显示出此位置的Marker数量为2,当然更多的时候显示的数量就不是2了。

// 自定义的聚合类MyMarkerClusterArrayList<MarkerImageView> clustersMarker = new ArrayList<MarkerImageView>();for (MarkerOptions mp : markerOptionsListInView) {if (clustersMarker.size() == 0) {// 添加一个新的自定义markerclustersMarker.add(new MarkerImageView(PointAggregationAty.this, mp, projection, 80));// 80=相距多少才聚合} else {boolean isIn = false;for (MarkerImageView cluster : clustersMarker) {// 判断当前的marker是否在前面marker的聚合范围内 并且每个marker只会聚合一次。if (cluster.getBounds().contains(mp.getPosition())) {cluster.addMarker(mp);isIn = true;break;}}// 如果没在任何范围内,自己单独形成一个自定义marker。在和后面的marker进行比较if (!isIn) {clustersMarker.add(new MarkerImageView(PointAggregationAty.this, mp, projection, 80));// 80=相距多少才聚合}}}

里面还涉及一些关于路线的就不一一在这里介绍了。如有需要请下载源码
由于时间有限更多的功能会在后面意义添加,敬请期待,如果你有更好的还请不吝赐教。

Github 下载地址

Android 高德地图的开发相关推荐

  1. Android高德地图基本开发/在线高德离线地图开发/断网使用离线地图(Assets文件夹的使用)

    文章目录 高德SDK基本使用 前置操作 需求一:显示地图,并以当前所在位置为中心 权限申请 布局功能代码 活动功能代码 效果展示 需求二:离线地图(直接添加到应用端项目内) 需求三 :点击数据后以数据 ...

  2. android 高德地图定位获取经纬度

    android 高德地图定位获取经纬度 之前开发定位都是集成百度的,领导说要用高德的,没办法干吧,官方的文档太详细了看着真累. 我们得先去官网注册开发者账号,创建应用,填写自己项目的包名和SHA1, ...

  3. android高德地图默认当前位置,【报Bug】1.9.2 android 高德地图无法定位到当前位置...

    详细问题描述 (DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题) [内容] 1.9.2版本 a ...

  4. Android高德地图自定义Markers的例子

    下文为各位重点介绍关于Android高德地图自定义Markers的例子,希望这篇文章能够让各位理解到Android高德地图自定义Markers的方法. 之前的博客里说了地图的嵌入和定位,今天就说说在地 ...

  5. android 高德地图SDK报 KEY鉴权失败

    android 高德地图SDK报 KEY鉴权失败. 一般在项目被转移,或项目使用的SDK被其他项目使用时,会发生这种情况! 解决办法 进入高德地图api控制台 点应用管理-我的应用-创建应用 - 根据 ...

  6. Android 高德地图(带有定位和点击显示经度纬度)

    Android高德地图测试,如下: 1.Android高德地图Demo地址下载:       下载android高德地图Demo 1.2 Android定位SDK 一键下载 1.3 下载好的文件zip ...

  7. Android 高德地图给指定坐标显示图片,以及聚合显示

    官网实例请点击:Android 高德地图聚合官网 下面是一个案例: 效果图: MainActivity public class MainActivity extends AppCompatActiv ...

  8. android 高德地图方向指向不变问题分析

    问题描述 高德地图,方向指向不变. 通过高德地图sdk开发指南发现 高德地图通过orientation sensor 来判断当前方向的. 我遇到的问题最后分析,是我们的设备orientation x ...

  9. java实现高德地图app,Android 高德地图入门demo,最新高德地图实现方法,附源码及apk...

    [实例简介] Android 高德地图入门demo,最新高德地图实现方法,附源码及apk [实例截图] [核心代码] GaoDeDemo ├── GaoDeDemo │   ├── app │   │ ...

最新文章

  1. 【C 语言】数组 ( 数组类型表达 | 定义数组类型 )
  2. Field Service Center Customization
  3. 小程序-wx:for
  4. Android开发之高德地图无法显示地图的原因
  5. 加油四班!加油佟穆!我们的征途是星辰大海!!!
  6. 重构:改善既有代码的设计(评注版) 评注者序
  7. 研究显示每天工作超8小时得心脏病概率增加80%,生命很重要,工作不要那个累。
  8. sqlmap源码阅读系列init中的_cleanupOptions
  9. c++ string 回文串_第33期:上海自来水来自海上,回文字符串验证!
  10. 绝大部分博士目前都无法进入大学
  11. sap生产工单报工_SAP作业分割与作业价格计算说明
  12. linux tomcat守护_linux 设置tomcat为守护进程教程
  13. java设计模式工厂模式_Java中的复合设计模式
  14. WLAN配置实例(一)——二层组网直接转发
  15. springboot日志写入mysql_springboot运用logback将日志写入数据库
  16. js页面刷新或关闭时弹框
  17. 如何在团队内做技术分享
  18. 某CV四小龙继续裁员,AI独角兽还可以去吗?
  19. Linux磁盘16进制编辑,Tweak
  20. 互联网日报 | 2月1日 星期一 | 苏宁宣布云网万店组织架构;威马汽车完成上市辅导;美团上线医疗健康品牌“百寿健康网”...

热门文章

  1. 鸿蒙系统一直重启怎么办,我的电脑能开机随后就是进不了系统一直黑在那边,时间长了就自动重启...
  2. 关于Linux和Windows一个对比
  3. 教程向|衣服作起来和真的一样!zbrush雕刻褶皱的技巧第二弹
  4. vpu测试_联发科P30支持的VPU是什么?不知道就别说你懂科技了
  5. 为MacTex配置Ctex环境
  6. 一页纸需求的应对方法 —— 五步法
  7. PI实时数据库系统升级
  8. 关于找不到www.jetbrains.com的服务器IP地址
  9. 服务器老被攻击?如何避免服务器被恶意攻击?
  10. 激光雷达还是摄影测量?两者数据融合如何提高点云质量