一、平移地图

移动地图的原理是利用手指在屏幕上拖动的距离,转换为在地图上距离,把地图坐标加上偏移的距离实现地图移动。

由于地图是绘制到Bitmap上的,所以地图移动和缩放的过程只要改变Bitmap的矩阵即可,待移动和缩放完成后,再根据新的地图范围重新渲染地图。

地图移动过程的关键代码:

offsetX=newX-lastX

offsetY=newY-lastY

matrix.postTranslate(offsetX, offsetY)

canvas.drawBitmap(Bitmap,matrix,paint)

移动完成后重新计算地图范围的关键代码:

1、计算偏移值

offsetX=newX-startX

offsetY=newY- startY

offsetMapX= offsetX*resolution

offsetMapY= offsetY*resolution

2、重新计算坐标

minX = mapExtent.getMinX()-offsetMapX

minY = mapExtent.getMinY()+offsetMapY

maxX = mapExtent.getMaxX()-offsetMapX

maxY = mapExtent.getMaxY()+offsetMapY

二、缩放地图

地图缩放的原理是利用两指在屏幕上滑动时,两指之间的距离变化比值进行缩放地图,地图缩放时,两指之间的中心点保持坐标不变。

地图缩放时的关键代码:

newDis=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))   //计算两指之间的距离

scale=newDis/lastDis                                                   //两指在点击屏幕到离开屏幕时的距离比

matrix.postScale(scale, scale, this.startX, this.startY);

canvas.drawBitmap(Bitmap,matrix,paint)

三、在android下触发的事件

由于地图的平移和缩放是用手指完成的,所以对地图进行平移和缩放都是在用于绘制地图的view上的onTouchEvent事件里面完成,下面是这个事件的代码(其他代码就不公开了):

public boolean onTouchEvent(MotionEvent motionEvent){int x1=(int) motionEvent.getX(0);int y1 =(int)motionEvent.getY(0);int x2=-1;int y2=-1;if (motionEvent.getPointerCount() == 1) { //平移if(isZoom==true){return;}switch (motionEvent.getAction()) {case MotionEvent.ACTION_DOWN:isTouching=true;matrix=new Matrix();this.pointerPressed(x1, y1, x2, y2);break;case MotionEvent.ACTION_UP:this.isRefreshMap=false;this.pointerReleased(x1, y1, x2, y2);isTouching=false;break;case MotionEvent.ACTION_MOVE:this.pointerDragged(x1, y1, x2, y2);break;}} else if (motionEvent.getPointerCount() == 2) {  //缩放isZoom=true;this.x=-1;this.y=-1;x2=(int)motionEvent.getX(1);y2=(int)motionEvent.getY(1);if(motionEvent.getAction() != MotionEvent.ACTION_MOVE){if(this.lastDis<0){isTouching=true;matrix=new Matrix();this.startZoom(x1, y1, x2, y2);}else{this.isRefreshMap=false;this.endZoom(x1, y1, x2, y2);isZoom=false;isTouching=false;}}else{this.touchZoom(x1, y1, x2, y2);}}
}        

转载于:https://www.cnblogs.com/gdguansun/p/4793097.html

地图的平移、缩放的实现(android版)相关推荐

  1. 一行CSS样式去除百度地图版权,去除百度地图右上角平移缩放控件的市县区文字

    /*去除百度地图版权,去除百度地图右上角平移缩放控件的市县区文字*/ .anchorBL, .BMap_zlHolder {display: none;visibility: hidden;}

  2. html地图缩放比例,百度地图之添加控件——比例尺、缩略图、平移缩放

    地图控件概述 百度地图上负责与地图交互的UI元素称为控件.百度地图API中提供了丰富的控件,您还能够经过Control类来实现自定义控件.javascript 地图API中提供的控件有:css Con ...

  3. html更改地图放大缩小图标,百度地图之添加控件——比例尺、缩略图、平移缩放...

    地图控件概述 百度地图上负责与地图交互的UI元素称为控件.百度地图API中提供了丰富的控件,您还能够经过Control类来实现自定义控件.javascript 地图API中提供的控件有:css Con ...

  4. android版 地图标注物聚合

    本程序根据地图zoom大小来聚合标注物,clusterer标记聚合器用来解决加载大量点要素到地图上产生覆盖现象的问题,并提高性能,本代码为android版.

  5. 解决echart地图在平移和缩放后,重新生成地图,这时生成的地图不在容器中间,会跑到容器外面去。

    解决echart地图在平移和缩放后跑到容器外面去 写在前面 解决办法 实现效果图 外卖红包优惠券在哪里领,那些天天都可以领外卖优惠券的公众号是真的吗? 写在前面 用echart做一个中国地图(可缩放和 ...

  6. android 打开谷歌导航,国内开启google位置记录功能/android版google maps 7+上,恢复位置记录功能在国内使用(需root)...

    android版google 地图在 7以后的版本上,位置记录功能在国内不能用了,提示本功能不能在中国使用. 至少对本人,"位置记录"功能是非常有用的功能,尤其是骑车出行时记录自己 ...

  7. Java面试题大全(Android版)

    疯狂Java面试题大全(Android版) Java核心技术部分 Java核心技术部分的面试题,可能覆盖Java基本语法.面向对象(包括类定义.方法.构造器.递归.继承.抽象类.接口.枚举以及fina ...

  8. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. 疯狂Java面试题大全(Android版)

    疯狂Java面试题大全(Android版) 本大全每个月会定期更新,索取网址:http://www.fkjava.org Java核心技术部分 Java核心技术部分的面试题,可能覆盖Java基本语法. ...

最新文章

  1. oracle database link mysql_oracle database link使用说明
  2. 18个不常见的C#关键字,您使用过几个?
  3. why Participants tab in GM6 is hidden - by extension
  4. 怎么样从一个疯狂下载者成为一个学习者
  5. 【51单片机快速入门指南】4.5:I2C 与 TCA6416实现双向 IO 扩展
  6. Java8 中的 Optional
  7. select 实现类似多线程_redis中的网络IO有了解过吗,它是单线程的还是多线程的,为什么要用单线程?...
  8. Net::OpenSSH 模块使用实例
  9. python调用视频流_RTSP协议进行视频取流的方法、注意点及python实现
  10. Linux 环境下Fortran程序连接使用Intel MKLPardiso解对称稀疏矩阵
  11. 如何在Linux下编译Openwrt的ipk(编译Dogcom为例)
  12. 腾讯计算机编程本科年薪,腾讯程序员年薪80万,却感慨:天花板太低,想放弃工作去读研!...
  13. ThrustMaster HOTAS WARTHOG飞行摇杆评测
  14. 马云公益基金会新版官网上线,启用mayun.xin!
  15. 130242014047-徐晓敏-实验一
  16. 微信读书怎么导入txt
  17. 甲方乙方——如何协调设计师与客户之间的矛盾
  18. r语言中popsd和sd的区别_R语言中回归和分类模型选择的性能指标
  19. linux nfs配置参数,NFS常用参数
  20. C语言提取gpgga例子

热门文章

  1. Ellex激光器参数与激光消融手术风险的关系
  2. 打开老工程的办法(日常操作以这个为准)
  3. 在package-lock.json中指定node-mass版本+独立编译flink中的flink-runtime-web模块
  4. can‘t resolve symbol xxx
  5. sas ondemand for academics使用
  6. hexo的yelee主题让文章呈现圆角效果
  7. 1.1 向量基本概念
  8. linux idc账号,快速安全地建立Linux用户账户
  9. not found on server registry
  10. NYOJ 1068 ST(段树 为段更新+间隔总和)