前段时间由于公司项目需要使用地图功能,刚开始看到功能需求的时候,以为只是简单简单的定位和基础地图的展示,于是就决定使用比较常用的百度地图,或者高德地图。项目启动之后,就开始接入百度地图的SDK开始做开发。当需求的功能基本完成的时候,一演示,经理说不是想要的效果,要把底图换成特定地方的地图,并且只展示指定的区域。这个需求让我犯难了,于是开始在百度地图官网上查询百度地图是否有这样的功能,果然百度地图的SDK还是很强大的,的确给开发者提供了这样的API,让开发者可以指定一张图片替换掉地图上指定的区域。但这个似乎经理的要求还是有一些不一样,替换完之后还要只显示这块区域,于是继续在官网上寻找答案,这次却没有收获,(在这里也希望阅读到这篇文章并且知道方法的大神可以给我留言)于是只能放弃使用百度地图了。之后又想到了既然是使用一张特定的地图那肯定就是有图片咯,那就用图片控件来展示不就好了,按照这个思路试了一下,可是烦人的OOM这个方法也被pass了(图片大小12702*9243)。于是开始在网上搜索解决办法,终于在一个博客中看到了一个叫mappwidget的库,用于手绘地图,这个似乎和我的需求很吻合。于是按照博客中的步骤开始生成地图资源,然后导入到项目里,然后初始化控件,一运行,项目跑起来了,基本满足需求,于是马上找经理演示,结果经理一看,提出了一堆问题,什么图片放大缩小不够平滑,缩放每次只能缩放一个等级.......让我一周内解决这些问题。一周!开什么玩笑!我才刚刚找到这个库,而且网上的资料也有限,这下可怎么办呢,不过还好这是个开源的项目,只能从源码上下手了,看来这一周注定会过得很充实啊。

开源项目地址:https://github.com/lemberg/mappwidget 里面包含了项目源码和jar包,下面我们就一步一步完成手绘地图的开发

1,使用Map Slicing Tool工具制作瓦片地图集

1,以插件形式安装该工具

打开eclipse的安装目录——plugins目录——将工具jar包粘贴——重启eclipse

2,在eclipse中用生成瓦片地图集

开发eclipse——Window——show View——Other——mAppWidget——Map Slicing Tool

3,根据工具栏的操作界面来选择地图原件,并选择生成地图集的保存地址,然后点击Export开始生成,如图

(其中Tile Size表示切割的每张图片的像素大小;GPS Positioning勾选之后可以输入图片四个点的坐标和对应的GPS坐标)

4,根据生成的保存地址找到生成的瓦片地图集文件夹,然后导入到项目中,项目文件结构如图:

到此瓦片地图集就完成了。

2,导入mappwidget库,展示地图

1,导入mappwidget_1.4.1_trial.jar

2,布局,用任何一种布局方式作为地图的载体,我以LinearLayout为例,如图:

3,调用地图类MapWidget,如图:

初始化地图,并加载,如图:

到此手绘地图的基本展示就完成了。

手绘地图的更多操作请参考博客http://blog.csdn.net/wangyuetingtao/article/details/9207231

接下来我要讲的是在一周的时间里如何解决经理提出的问题。

首先是关于缩放不平滑,感觉跳度很大的问题

既然要解决问题,首先我们要明白问题产生的原因,根据官方的文档,瓦片地图切割工具默认的切割比列是1/2,就是

每一个级别长宽都缩小为上一个级别的1/2,所以在缩放的时候会感觉长宽的变化太过生硬,那既然这样,我们把切割

比列变大不就好了,改为3/4,每次只放缩1/4,这样看不来不就不会那么突兀了。于是通过修改工具类源码,解决了

瓦片地图集切割的问题。把重新切割的图片导入到项目中之后发现不是原来的效果。原来只改变了切割的图片是不够

的,mappwidget库的计算方式也要改变,再通过改变计算方式,这下总算看到效果了。

关于手势缩放每次只能放大一个级别的问题

在源码中监听手势的时候改变了图片缩放的状态,使得每次手指按下之后只能缩放一个级别,通过修改源码也能实现。

在我的项目中还要其他的需求,对源码还做了其他的改动,就不上传了,要是对上面两个问题感兴趣的可以留言。

基于mappwidget的手绘地图相关推荐

  1. 基于mAppWidget实现手绘地图(八)–获取用户地理位置

    你有两种方式确定用户的当前位置: 使用安卓标准方式 使用MapWidget的监听器 标准方式: 使用以下代码: LocationManager locManager = (LocationManage ...

  2. 基于mAppWidget实现手绘地图(十五)–如何控制放大缩小

    一般来说,可以使用以下几种方式来控制地图的放大/缩小 : 使用控件底部的缩放按钮 双击控件 pinch手势 物理按键 :I键标识缩小 :O键表示放大.(只有设备具有物理按键才行) 当然,你也可以使用自 ...

  3. Android基于mAppWidget实现手绘地图(一)--简介

    http://lemberg.github.io/mappwidget/user_guide.html 最近在看一些导游类应用,发现一些景区的导览图使用的完全是自定义地图,也就是手绘地图.这种小范围使 ...

  4. Android基于mAppWidget实现手绘地图(三)--环境搭建

    首先,你在Eclispe开发环境中新建一个项目:然后,可以通过Eclispe项目管理工具把这个项目集成到你的app项目中.下面手册会手把手教你如何正确创建一个地图对象. 第一: 新建一个新的Anroi ...

  5. Android基于mAppWidget实现手绘地图(四)--如何附加javadoc

    如何把javadoc添加到代码库中? How to attach javadoc to the library? 项目属性-->Java Build Path-->Libraries.选择 ...

  6. Android基于mAppWidget实现手绘地图(五)--如何创建地图资源

    地图资源可以通过Slicing Tool工具生成,教程如下: 1.打开Eclipse标准版4.3.2,以Java项目形式导入"slicingtool"项目,运行.(必须是eclip ...

  7. Android基于mAppWidget实现手绘地图(二)--概要

    离线地图是一张被切成类似瓷砖般格子图像组成,这些被切开的格子组织成多个缩放级别.缩放级别是从0开始.0这个缩放级别,地图图像的尺寸为1*1像素.在每下一个缩放级别,图像尺寸则会两倍递增. 每个地图都是 ...

  8. Android基于mAppWidget实现手绘地图(十一)–移动地图到某个坐标

    你可以使用以下几个方法: MapWidget.scrollMapTo(android.location.Location location); MapWidget.scrollMapTo(androi ...

  9. 手绘地图深度解析:类型、风格、功能、价值、制作流程、智慧导览

    本文概要:文本尝试系统性.多角度.全方位的介绍一下现在流行的手绘地图系统. 作者:轻轻的烟雾(z281099678) 一.手绘地图定义 什么是手绘地图?或者说,手绘地图到底是什么样的? 手绘地图首先是 ...

最新文章

  1. 【LeetCode】2. Add Two Numbers
  2. POJ 1269 Intersecting Lines(求直线交点)
  3. 【luogu】P1772物流运输(最短路+DP)
  4. rest-framework框架的基本组件
  5. 比“花书”更合适入门者的“鱼书”
  6. JAVA简单聊天室的实现
  7. OpenCV-python安装教程
  8. win10电脑开启卓越性能
  9. java 计算正态分布_统计基本概念 期望 方差 均方差 正态分布 Java统计计算
  10. 让你的应用支持新iPad的Retina显示屏
  11. 【笔记本双屏外界显示屏分辨率调高】解决方法
  12. 单个网页的搜索引擎优化(SEO)策略
  13. 云服务器ecs是虚拟主机,云服务器ecs是虚拟主机吗
  14. [转]PHP大型Web应用入门(一)
  15. 「双软认定」软件企业需要满足什么条件?
  16. surface pro java_平板界的楷模!Surface Pro 4简直无敌了
  17. 记忆化搜索 day48
  18. 亚马逊六页纸的理解与思考
  19. 深交所互动平台_游资抬轿、高管减持、投资者蹭热点“大牛股”为何被深交所点名?...
  20. Android 网络性能优化(1)概述

热门文章

  1. interlib android客户端开发,基于Android移动图书馆设计与开发.doc
  2. 刮胡刀专用芯片AH6901(锂电池升压)+AH855B(单节充电芯片)
  3. 选择正确的CE版本然后下载
  4. opencv-描述图像运动(前篇)
  5. 百度搜索低调改版搜索界面!
  6. cad单位_CAD绘图技巧:快速测量CAD图纸中图形的面积与周长
  7. fastadmin插件-多规格商城-自写的插件,安装即可用
  8. 游卡桌游王锐杰:桌游网游化是必然趋势
  9. Java实现简单的斗地主案例(超详细代码)
  10. Queue 中 add() 和 offer() 区别