2011-06-06 73 views
0

我有一个应用程序,我试图模拟实时跟踪,所以我正在从一个类中读取一些GPS数据,我已经存储了数据并尝试把这些点放在地图上,我还会在当前位置添加一个标记。如何根据GPS数据动态改变覆盖位置

我面临的问题是,一旦我将一个覆盖图添加到一个位置,它就会停留在那里......当我读取下一个位置并将其放置在地图上并向其添加标记时。 ...我在地图上有两个叠加层...

我想要做的就是将叠加层放在每个当前位置......就像它会在地图上走路一样......并且只有一个叠加层当时我所代表的位置上的地图...以前的位置上以前的叠加层消失了,但我无法真正知道如何实现这一点。

希望你能帮助我!

这是我的代码:

public void onCreate(Bundle savedInstanceState) 
{ 
    marker = getResources().getDrawable(R.drawable.comet); 
    marker.setBounds(0,0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight()); 
} 

----------------我使用的是异步线程读取GPS数据------- ------------------

protected Void doInBackground(Void... voids) 
{ 
    while (true) { 
    longitude = ServerManager.getInstance().getLastLongitude(); 
    latitude = ServerManager.getInstance().getLastLatitude(); 
    p = new GeoPoint(latitude, longitude); 
    publishProgress(p); 
    } 
    } 

    protected void onProgressUpdate(GeoPoint... progress1) 
    { 
    mapView.getOverlays().add(new SitesOverlay(marker,progress1[0])); 
    } 
} 

最后,这是我的班组长它增加了覆盖:

private class SitesOverlay extends ItemizedOverlay<OverlayItem> 
{ 
    private List<OverlayItem> items = new ArrayList<OverlayItem>(); 
    private Drawable marker = null; 
    GeoPoint gp1; 

    public SitesOverlay(Drawable marker,GeoPoint gp1) 
    { 
     super(marker); 
     this.marker = marker; 
     this.gp1=gp1; 
     items.add(new OverlayItem(gp1,"Your location", "You are here!")); 
     populate(); 
    } 

    @Override 
    protected OverlayItem createItem(int i) 
    { 
     return (items.get(i)); 
    } 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
     super.draw(canvas, mapView, shadow); 
     boundCenterBottom(marker); 
    } 

    @Override 
    public int size() 
    { 
     return (items.size()); 
    } 
} 

回答