【移动GIS】如何监听地图操作事件?
2013-04-26 17:27
519 查看
在android地图开发过程中,我们常常会有这样一种需求:当点击或长按地图时,然后做一些事。比如:当我长按地图某一处时,为该处添加给图标
说下思路,首先创建一个图层,该图层继承overlay,然后在该图层中实现onLongPress接口,然后再把该图层添加到mapview中。
好了废话到此为止了,先来个效果图吧。当长按地图时添加一个marker:
[align=left] [/align]
现在说说代码吧,创建一个层叫MapEventsOverlay:
然后再把该层添加到mapview中:
MapEventsOverlay mo = new MapEventsOverlay(context);
mapView.getOverlayManager().add(mo);
好了,这就完事了
-----------------------------------------------------------------------------华丽分割线---------------------------------------------------------------------------------------------------
当然你也可以将此类独立出来,然后再另外创建一个接口类,这样其它地方也可以用了,干脆我把独立后的代码一并贴出来吧:
MapEventsOverlay:
接口类:MapEventsReceiver
再来个使用例子吧:
好了,到此完工,你会了么?
说下思路,首先创建一个图层,该图层继承overlay,然后在该图层中实现onLongPress接口,然后再把该图层添加到mapview中。
好了废话到此为止了,先来个效果图吧。当长按地图时添加一个marker:
[align=left] [/align]
现在说说代码吧,创建一个层叫MapEventsOverlay:
private class MapEventsOverlay extends Overlay{ @Override public boolean onLongPress(MotionEvent e,MapView mv){ Projection proj = mapView.getProjection();//获得投影对象 GeoPoint gp = (GeoPoint) proj.fromPixels(e.getX(), e.getY());//坐标转换 /**********自己写你要做的事咯,自己YY吧***********/ mapView.invalidate();//重绘地图 return true; } @Override protected void draw(Canvas c, MapView osmv, boolean shadow) { } public MapEventsOverlay(Context ctx) { super(ctx); } }
然后再把该层添加到mapview中:
MapEventsOverlay mo = new MapEventsOverlay(context);
mapView.getOverlayManager().add(mo);
好了,这就完事了
-----------------------------------------------------------------------------华丽分割线---------------------------------------------------------------------------------------------------
当然你也可以将此类独立出来,然后再另外创建一个接口类,这样其它地方也可以用了,干脆我把独立后的代码一并贴出来吧:
MapEventsOverlay:
public class MapEventsOverlay extends Overlay { private MapEventsReceiver mReceiver; /** * @param ctx the context * @param receiver the object that will receive/handle the events. * 必须实现 MapEventsReceiver 接口. */ public MapEventsOverlay(Context ctx, MapEventsReceiver receiver) { super(ctx); mReceiver = receiver; } @Override protected void draw(Canvas c, MapView osmv, boolean shadow) { //Nothing to draw } @Override public boolean onSingleTapUp(MotionEvent e, MapView mapView){ Projection proj = mapView.getProjection(); IGeoPoint p = proj.fromPixels(e.getX(), e.getY()); return mReceiver.singleTapUpHelper(p); } @Override public boolean onLongPress(MotionEvent e, MapView mapView) { Projection proj = mapView.getProjection(); IGeoPoint p = proj.fromPixels(e.getX(), e.getY()); //throw event to the receiver: return mReceiver.longPressHelper(p); } }
接口类:MapEventsReceiver
public interface MapEventsReceiver { boolean singleTapUpHelper(IGeoPoint p); boolean longPressHelper(IGeoPoint p); }
再来个使用例子吧:
public class MapEventsDemo extends Activity implements MapEventsReceiver { private MapView mapView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /************一些你自己的设置*****************/ MapEventsOverlay mapEventsOverlay = new MapEventsOverlay( getApplicationContext(), this); mapView.getOverlays().add(mapEventsOverlay); } //长按地图时触发 @Override public boolean longPressHelper(IGeoPoint igeo) { /**添加你的代码吧**/ mapView.invalidate(); return true; } @Override public boolean singleTapUpHelper(IGeoPoint arg0) { return false; } }
好了,到此完工,你会了么?
相关文章推荐
- 如何在Swing中,进行某个操作,而不触发事件监听
- C#如何监听全局的事件-例如鼠标移动事件
- osmdroid监听地图操作事件(2)
- 最新基于高德地图的android进阶开发(5)地图的基本操作、事件监听、用户UI、图层选择等
- C#如何监听全局的事件-例如鼠标移动事件
- C#如何监听全局的事件-例如鼠标移动事件
- echarts 与 百度地图bmap结合系列: 如何设置地图缩放级别和监听缩放事件
- C#如何监听全局的事件-例如鼠标移动事件
- 图片移动、鼠标画线----实现GIS地图操作
- 如何解决OnTouch监听事件只监听到DOWN操作,没有监听到MOVE和UP操作
- 如何限制UITextField输入长度(监听textField文本变化的事件)
- 如何通过GestureDetector实现屏幕事件监听(滑动切换Layout) (转)
- ionic3 踩坑、如何全局监听所有页面事件(ionViewWillLeave),答案是ionic-angular 中的 App类。
- 如何避免点击事件连续操作时元素变蓝
- c# 获取移动硬盘信息、监听移动设备的弹出与插入事件
- HOME键操作的事件监听
- 如:有个某市所有移动用户号码记录资料表需要更新,你将如何操作?
- android 中如何监听按键的长按事件
- 如何监听视图的addSubView或者移除事件
- javascript如何监听页面刷新和页面关闭事件