是否可以批量添加多边形到Google Map View(API v2)

时间:2013-03-15 07:12:32

标签: android google-maps drag-and-drop touch google-maps-android-api-2

我在Android 4.0+的Google MapView(API v2)上绘制了一堆(50-500)多边形,并尝试使用触摸事件修改它们。我通过dispatchTouchEvent()捕获的触摸事件,它正在工作,只是非常缓慢。表现非常糟糕,以至于它“感觉”不像它正在发挥作用。

我认为问题在于我必须循环遍历一组多边形,一次将它们添加到地图中,因此地图会重新绘制每个多边形。

通过文档我看不到一次添加多个多边形的方法,但也许我错过了一些东西。任何帮助将不胜感激。

我的dispatchTouchEvent看起来像这样:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if(mInDrag||mInRotate||mInAB){
        if (ev.getAction()==MotionEvent.ACTION_DOWN){
            mStartPt = mMap.getProjection().fromScreenLocation(new Point((int)ev.getX(), (int)ev.getY()));
            mLastDragTime=System.currentTimeMillis();
        } else if (ev.getAction()==MotionEvent.ACTION_MOVE){                
            LatLng endPt = mMap.getProjection().fromScreenLocation(new Point((int)ev.getX(), (int)ev.getY()));
            long iterationTime = System.currentTimeMillis()-mLastDragTime;
            //checking iterationtime so grid doesn't move after the user stops dragging
            if ((!mStartPt.equals(endPt))&&iterationTime<300) {
                LatLng delta = new LatLng(mStartPt.latitude-endPt.latitude, mStartPt.longitude-endPt.longitude);
                mLastDragTime=System.currentTimeMillis();
                if (mInDrag) {
                    //setup calcs
                } else if (mInAB){
                    //setup calcs
                } else if (mInRotate){
                    //setup calcs
                }
                clearTempGrid(); //clears the grid including erasing the existing polygons on the map.
                int gridType = gridTypeSpin.getSelectedItemPosition();
                for (PolygonOptions newPolygon : myPolygonGrid.modify(A, B)) {
                    //I run into problems here. Even 150 polygons slows it down
                    Polygon myPolygon = mMap.addPolygon(newPolygon);
                    tempPolygons.add(myPolygon);
                }
            }
        }
    }
    return super.dispatchTouchEvent(ev);
}

1 个答案:

答案 0 :(得分:0)

您确定要拖动时修改所有多边形吗?

添加多边形一次并且不清除并在每次触摸事件时重新创建它们。

使用Polygon.setPoints(...)修改它们(全部?)。