ArcGIS Android Runtime100.1.0

来源:互联网 发布:淘宝官方网站注册免费 编辑:程序博客网 时间:2024/06/10 01:33

草图绘制

在地图上进行涂鸦操作之后保存图形数据。

  • SketchEditor 草图编辑器,相当于地图绘制监听

开始绘制操作准备

  if (_sketchEditor == null) {            _sketchEditor = new SketchEditor();            _mMapView.setSketchEditor(_sketchEditor);        }        _sketchEditor.addGeometryChangedListener(this);        _sketchEditor.start(SketchCreationMode.FREEHAND_LINE);

其中SketchCreationMode里有几种类型:

    POINT,    MULTIPOINT,    POLYLINE,    POLYGON,    FREEHAND_LINE,    FREEHAND_POLYGON;

支持手绘涂鸦的有:

    FREEHAND_LINE,    FREEHAND_POLYGON;

在进行绘制完成之后需要进行保存Geometry:

 @Override    public void geometryChanged(SketchGeometryChangedEvent e) {        //获得Geometry,进行保存        if (_sketchEditor.isSketchValid()) {            Geometry currentGeo = e.getGeometry();            geometries.add(currentGeo);            }    }

其中如果要二次进行涂鸦的时候还能继续绘制草图而不是清除上一次的草图数据,可以设置mapView的Touch监听。
难点在于SketchEditor会与OnTouch的监听有冲突:

 if (_sketchEditor == null) {            _sketchEditor = new SketchEditor();            _model.getMapView().setSketchEditor(_sketchEditor);        }        _sketchEditor.addGeometryChangedListener(this);        _sketchEditor.start(_onInputType.getInputType());        //添加地图的Touch监听        DefaultMapViewOnTouchListener lo = (DefaultMapViewOnTouchListener) _model.getMapView().getOnTouchListener();        _model.getMapView().setOnTouchListener(new SketchDrawTouchEvent(activity, _model.getMapView(), lo, _sketchEditor));

其中SketchDrawTouchEvent.java:

public class SketchDrawTouchEvent extends DefaultMapViewOnTouchListener {    private View.OnTouchListener _listener;    private DefaultMapViewOnTouchListener _maplistener;    private SketchEditor sketchEditor;    public SketchDrawTouchEvent(Context context, MapView mapView, View.OnTouchListener listener, SketchEditor sketchEditor) {        super(context, mapView);        _listener = listener;        _maplistener = (DefaultMapViewOnTouchListener) listener;        this.sketchEditor = sketchEditor;    }    @Override    public boolean onUp(MotionEvent e) {        return super.onUp(e);    }    @Override    public boolean onTouch(View v, MotionEvent e) {    //这里实现监听选择性调用        if (e.getAction() == MotionEvent.ACTION_UP) {            CgoMFSFreeDraw.refreshGraphics();        }        if (_maplistener != null) {            return _maplistener.onTouch(v, e);        }        if (_listener != null)            return _listener.onTouch(v, e);        return false;    }}

在geometryChanged方法中进行不断的Geometry保存,当触发结束操作,完成草图绘制。

以上。