2012-05-13 6 views
1

пересекающих я сделал это:андроида нарисовать линию betwen массива точек линии между началом до конца

public class LongTravlOverlay extends Overlay{ 
    private Projection projection; 
    private List<GeoPoint> glist; 

    GeoPoint gP1; 
    GeoPoint gP2; 
    public LongTravlOverlay(Projection a,List<GeoPoint> b){ 
     projection=a; 
     this.glist=b; 
    } 
    public void draw(Canvas canvas, MapView mapv, boolean shadow){ 
     super.draw(canvas, mapv, shadow); 

     Paint mPaint = new Paint(); 
     mPaint.setDither(true); 
     mPaint.setColor(Color.BLUE); 
     mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(3); 
     for(GeoPoint g1:glist) 
     { 
      if(gP1!=null) 
      { 
       gP1=gP2; 
       gP2=new GeoPoint(g1.getLatitudeE6(),g1.getLongitudeE6()); 
      } 
      else 
      { 
       gP1=new GeoPoint(g1.getLatitudeE6(),g1.getLongitudeE6()); 
       gP2=gP1; 
       continue; 
      } 
     Point p1 = new Point(); 
     Point p2 = new Point(); 
     Path path = new Path(); 

     projection.toPixels(gP1, p1); 
     projection.toPixels(gP2, p2); 

     path.moveTo(p2.x, p2.y); 
     path.lineTo(p1.x,p1.y); 

     canvas.drawPath(path, mPaint); 
     } 
    } 
} 

Он работает и рисует линию между всеми точками. Единственная проблема заключается в том, что между первой точкой и последней точкой есть также линия, которая заканчивается пересечением пути других точек. Как его удалить?

ответ

0

У вас есть геопотоки gP1 и gP2 в качестве переменных экземпляра. draw будет вызываться несколько раз.

В конце ваших итераций при первом вызове draw, gP2 - последний пункт. На первой итерации второго и последующих вызовов draw, gP1 назначается последней точке, а gP2 назначается вашей первой точке. Это рисует линию между первой и последней точкой. Чтобы исправить это, просто объявите эти переменные в draw или инициализируйте его до нуля до повторения через ваши геототы.

gP1 = null; 
gP2 = null; 
for(GeoPoint g1:glist) { 
//Drawing logic 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^