转自:http://blog.csdn.net/arcgis_mobile/article/details/8263283

ArcGIS Runtime sdk for Android为我们提供了丰富的事件监听器,本节将主要介绍我们经常使用的监听器,并且介绍通过这些监听器可以实现哪些功能,在下面的监听器中只有MapOnTouchListener是类,其他皆为接口类型,如图所示:

1.1 MapOnTouchListener

MapOnTouchListener是MapView最为重要的监听器之一,它实现了OnTouchListener和MapGestureDetector.OnGestureListener接口,对于地图的所有操作MapOnTouchListener都可以进行相应,使用非常方便,在使用前我们只需扩展这个类并重写该类中的方法即可。用法如下

  1. myListener = new MyTouchListener(this, mapView);
  2. mapView.setOnTouchListener(myListener);
  3. /*
  4. * MapView's touch listener
  5. */
  6. class MyTouchListener extends MapOnTouchListener {
  7. public MyTouchListener(Context context, MapView view) {
  8. super(context, view);
  9. }
  10. public void setType(String geometryType) {
  11. this.type = geometryType;
  12. }
  13. public String getType() {
  14. return this.type;
  15. }
  16. public boolean onSingleTap(MotionEvent e) {
  17. return true;
  18. }
  19. public boolean onDragPointerMove(MotionEvent from, MotionEvent to) {
  20. return super.onDragPointerMove(from, to);
  21. }
  22. @Override
  23. public boolean onDragPointerUp(MotionEvent from, MotionEvent to) {
  24. return super.onDragPointerUp(from, to);
  25. }
  26. }

通过上面代码的方式我们就可以监听到不同的手势操作,对于不同的手势操作将执行不通过方法,通过这些方法我们可以添加我们所需的操作功能。如,当我们在地图上点击时弹出一个窗体,我们只需在onSingleTap()方法中完成点的获取、窗体的创建及其弹出操作即可。

1.2 OnLongPressListener

OnLongPressListener接口主要用于监听在地图上的长按事件,用法如下:

  1. //为地图添加一个长按监听器
  2. mapView.setOnLongClickListener(new View.OnLongClickListener() {
  3. //长按后自动执行的方法
  4. public boolean onLongClick(View v) {
  5. // TODO Auto-generated method stub
  6. return false;
  7. }
  8. });

1.3 OnPanListener

OnPanListener接口是用于当我们在MapView上平移地图操作时的事件监听,用法如下:

  1. //为地图添加一个平移监听器
  2. mapView.setOnPanListener(new OnPanListener() {
  3. public void prePointerUp(float fromx, float fromy, float tox, float toy) {
  4. }
  5. public void prePointerMove(float fromx, float fromy, float tox, float toy) {            }
  6. public void postPointerUp(float fromx, float fromy, float tox, float toy) {         }
  7. public void postPointerMove(float fromx, float fromy, float tox, float toy) {
  8. }
  9. });

1.4   OnPinchListener

OnPinchListener接口也是我们经常用到,它是对地图进行两指或多指进行操作时用到的事件监听,比如我们可以通过该接口实现两指夹/捏进行地图地图缩放。用法如下:

  1. //为地图添加夹/捏监听器
  2. mapView.setOnPinchListener(new OnPinchListener() {
  3. public void prePointersUp(float x1, float y1, float x2, float y2,
  4. double factor) {
  5. }
  6. public void prePointersMove(float x1, float y1, float x2, float y2,
  7. double factor) {
  8. }
  9. public void prePointersDown(float x1, float y1, float x2, float y2,
  10. double factor) {
  11. }
  12. public void postPointersUp(float x1, float y1, float x2, float y2,
  13. double factor) {
  14. }
  15. public void postPointersMove(float x1, float y1, float x2, float y2,
  16. double factor) {
  17. }
  18. public void postPointersDown(float x1, float y1, float x2, float y2,
  19. double factor) {
  20. }
  21. });

1.5   OnSingleTapListener

OnSingleTapListener接口是我们对地图进行点击操作时的事件监听器,用法如下:

  1. //为地图添加单击事件监听
  2. mapView.setOnSingleTapListener(new OnSingleTapListener() {
  3. //点击地图后自动执行的方法
  4. public void onSingleTap(float x, float y) {
  5. // TODO Auto-generated method stub
  6. }
  7. });

1.6    OnStatusChangedListener

OnStatusChangedListener接口用于监听MapView或Layer状态变化的监听器,用法如下:

  1. //添加状态监听器
  2. mapView.setOnStatusChangedListener(new OnStatusChangedListener() {
  3. public void onStatusChanged(Object source, STATUS status) {
  4. if(status == STATUS.INITIALIZED){
  5. }else if(status == STATUS.LAYER_LOADED){
  6. }else if((status == STATUS.INITIALIZATION_FAILED)){
  7. }else if((status == STATUS.LAYER_LOADING_FAILED)){
  8. }
  9. }
  10. });

从上面的代码我们可以清晰看到,对于MapView的状态变化主要有四种:

1)      STATUS.INITIALIZED初始化成功

2)      STATUS.LAYER_LOADED图层加载成功

3)      STATUS.INITIALIZATION_FAILED初始化失败

4)      STATUS.LAYER_LOADING_FAILED图层加载失败

1.7    OnZoomListener

OnZoomListener接口主要监听地图的缩放事件,用法如下:

  1. mapView.setOnZoomListener(new OnZoomListener() {
  2. //缩放之前自动调用的方法
  3. public void preAction(float pivotX, float pivotY, double factor) {
  4. }
  5. //缩放之后自动调用的方法
  6. public void postAction(float pivotX, float pivotY, double factor) {
  7. }
  8. });

到此,地图上的所有监听器都已经介绍完了,如有不明,可以加入ArcGIS 4 Android 群:167467748或250106494进行咨询。

ArcGIS Runtime for Android开发教程V2.0(8)基础篇-----地图事件的更多相关文章

  1. ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView

    原文地址: ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http:/ ...

  2. ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map

    原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NE ...

  3. ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置

    原文地址: ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.c ...

  4. ArcGIS Runtime for Android开发教程V2.0(1)基本概念

    原文地址: ArcGIS Runtime for Android开发教程V2.0(1)基本概念 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csd ...

  5. 【10.2.3】ArcGIS Runtime for Android搭建开发环境过程中问题具体解释

    一.Visual Studio Ultimate2012安装过程问题 1.问题描写叙述 安装完毕后,您将看到一条消息,指示安装程序已完毕.但并非全部的功能具有已正确安装.以及下面警告消息: Micro ...

  6. ArcGIS Runtime for Android 使用异步GP服务绘制等值线

    关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...

  7. 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步

    原文:<ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 摘要:在ArcMap中,能够很方面地进行MapView和Layo ...

  8. (转)ArcGIS Runtime for Android 使用异步GP服务绘制等值线

    关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...

  9. Android开发教程大全介绍

    Android是由谷歌在2007年推出的一个开放系统平台,主要针对移动设备市场,目前版本为Android 4.0.Android基于Linux,开发者可以使用Java或C/C++开发Android应用 ...

随机推荐

  1. [翻译]log4net教程

    原文:log4net Tutorial 一.基础: log4net分为三部分:配置.设置和调用.配置通常是在app.webconfig或web.config文件中:为了增加灵活性,我们也可以使用单独的 ...

  2. vim插件:latex-suite 使用方法

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4030057.html 零.操作快捷键:对于<++>的块,按下ctrl+j即可快速 ...

  3. Unity帮助文档打开速度慢解决方法

    使用批量文本替换工具替换掉Unity安装目录中\Editor\Data\Documentation\en\Manual\下的所有文件中的如下两个部分:   1. <script type=&qu ...

  4. Jquery ajax使用json形式通信

    前台JS $.ajax({                              type: 'post',                              url: 'HandlerL ...

  5. Yii表单模型使用及以数组形式提交表单数据

    按Yii文档里的描述,Yii在处理表单的一般过程是: 创建表单对应的模型类,设置字段验证规则 创建表单提交对应的action,处理提交的内容 在视图中创建表单form 在刚刚的一个小项目里,想使用aj ...

  6. PL/SQL — 变长数组

    PL/SQL变长数组是PL/SQL集合数据类型中的一种,其使用方法与PL/SQL嵌套表大同小异,唯一的区别则是变长数组的元素的最大个数是有限制的.也即是说变长数组的下标固定下限等于1,上限可以扩展.下 ...

  7. 扩展pl0编译器设计——总述

    所谓编译器,实际上就是我们编程时将输入的高级语言代码转换成相应的目标代码,从而实现将目标代码转换成汇编码的一种过渡工具. 这种工具根据具体情况不同,可以将不同的高级语言代码转换成不同的目标代码,例如将 ...

  8. mapreduce 多路输出

    Streaming支持多路输出(SuffixMultipleTextOutputFormat) 如下示例: hadoop streaming \ -input /home/mr/data/test_t ...

  9. Spring 数据源配置一:单一数据源

    最近遇到一个项目,需要访问都多个数据源,并且数据库是不同厂商(mysql,  sqlserver). 所以对此做了一些研究,这里咱们采用渐进的方式来展开,先谈谈单一数据源配置.(稍后有时间会陆续补充其 ...

  10. webpack打包sass

    首先,需要支持sass,不管是有ruby环境的sass,还是node-sass,用npm装的sass模块,bootstrap-sass,gulp-sass..总归要有一个吧!(这里采用node-sas ...