我在 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);
}