2012-07-26 14 views
0

我想繪製許多地址之間的直線路徑作爲代碼給出.....但如果我嘗試縮放映射ConcurrentModificationException發生, plz help me .. ..我爲Android很新.....使用捕獲的定時器任務添加路徑覆蓋使用ConcurrentModificationException縮放

//this is the methode to draw path 
public void draw_path(View view) { 
    if(timer!=null) 
     timer.cancel(); 

     timerpath = new Timer(); 
     timerpath.scheduleAtFixedRate(new TimerTask(){ 
      int i=0; 
     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      List<Overlay> mapOverlays = mapView.getOverlays(); 

      if(i<replaydata.length-2){ 
       GeoPoint point=new GeoPoint((int) (Float.parseFloat(replaydata[i].split("~")[0]) * 1E6),(int) (Float.parseFloat(replaydata[i].split("~")[1])* 1E6)); 
       GeoPoint point2=new GeoPoint((int) (Float.parseFloat(replaydata[i+1].split("~")[0]) * 1E6),(int) (Float.parseFloat(replaydata[i+1].split("~")[1])* 1E6)); 

       mapOverlays.add(new PathOverlay(point2, point)); 
       mapView.postInvalidate(); 
       i=i+1; 
      } 
      } 


     }, 50, 500); 

    } 
//this is the PathOverlay Class 
package com.suneeltectonics.tracking; 

import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Point; 
import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.Projection; 
public class PathOverlay extends Overlay { 
private GeoPoint gp1; 
private GeoPoint gp2; 

public PathOverlay(GeoPoint gp1, GeoPoint gp2) { 
    this.gp1 = gp1; 
    this.gp2 = gp2; 
} 

@Override 
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, 
     long when) { 
    // TODO Auto-generated method stub 
    Projection projection = mapView.getProjection(); 
    if (shadow == false) { 

     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     Point point = new Point(); 
     projection.toPixels(gp1, point); 
     paint.setColor(Color.RED); 
     Point point2 = new Point(); 
     projection.toPixels(gp2, point2); 
     paint.setStrokeWidth(6); 
     canvas.drawLine((float) point.x, (float) point.y, (float) point2.x, 
       (float) point2.y, paint); 
    } 
    return super.draw(canvas, mapView, shadow, when); 
} 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    // TODO Auto-generated method stub 

    super.draw(canvas, mapView, shadow); 
} 

} 
//this is the crash log 
07-26 17:42:30.850: WARN/dalvikvm(2173): threadid=1: thread exiting with uncaught exception (group=0x400207d8) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173): FATAL EXCEPTION: main 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173): java.util.ConcurrentModificationException 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:44) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at com.google.android.maps.MapView.onDraw(MapView.java:494) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at android.view.View.draw(View.java:6740) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at android.view.ViewGroup.drawChild(ViewGroup.java:1640) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at android.view.View.draw(View.java:6743) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at android.view.ViewGroup.drawChild(ViewGroup.java:1640) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at android.view.ViewGroup.drawChild(ViewGroup.java:1638) 
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367) 

07-26 17:42:30.870:ERROR/AndroidRuntime(2173):在android.view.ViewGroup.drawChild(ViewGroup.java:1638 ) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):在android.view.View.draw(View.java:6743) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):在android.widget.FrameLayout.draw(FrameLayout.java:352) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):在com.android.internal.policy.impl.PhoneWindow $ DecorView.draw(PhoneWindow.java:1842) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):at android.view.ViewRoot.draw(ViewRoot。的java:1407) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):在android.view.ViewRoot.performTraversals(ViewRoot.java:1163) 07-26 17:42:30.870:ERROR/AndroidRuntime( 2173):at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):at android.os.Handler.dispatchMessage(Handler.java:99) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):at android.os.Looper.loop(Looper.java:123) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):at android.app.ActivityThread.main(ActivityThread.java:4633) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):at java.lang.reflect.Method.invokeNative(本機方法) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):在java.lang.reflect.Method.invoke(Method.java:521) 07- 26 17:42:30.870:ERROR/AndroidRuntime(2173):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:891) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173 ):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649) 07-26 17:42:30.870:ERROR/AndroidRuntime(2173):at dalvik.system.NativeStart.main(Native Method) 07-26 17:42:30.920:WARN/ActivityManager(150):強制整理活動com.suneeltectonics.tracking/.ViewReplay

+0

在一些崩潰日誌將.. – Abhinava 2012-07-26 12:02:46

+0

發表您的logcat :) – 2012-07-26 12:14:23

+0

日誌貓編輯.... – Suneel 2012-07-26 12:19:53

回答

0

唯一的例外是越來越引發由於列表項操作...

這不是因爲OnDraw的方法,但因爲你在操縱每個時鐘週期的整個列表..這時候的時鐘週期是爲什麼小你有例外,但是當它很大時,你不會得到任何東西。

不要試圖重新填充並修改所有的時間... 方法無效在那裏,以便它可以重新繪製的一切,但既然你已經把一個非常小的微調持續時間是越來越在價值衝突...

相關問題