0

現在の場所が変更されるたびに、現在marker自分に表示しています。current locationそして、以下のコードは正常に機能します。しかし、これに伴う問題は、-初めてある場所を通過し、マーカーがその位置にあると仮定しますが、2回目に他の別の場所を通過すると、マーカーは2番目の場所にありますが同じです時間私のマーカーも最初の場所にとどまります、そして私はこれを望んでいません。現在の場所が変更されるたびに、他のすべてのマーカーが消える必要があるだけで、現在の場所のマーカーだけがそこにあるはずです。私が皆にはっきりしていることを願っています

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);
        mapController = mapView.getController();
        mapController.setZoom(15);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                0, new GeoUpdateHandler());

    }

    public class GeoUpdateHandler implements LocationListener {

        @Override
        public void onLocationChanged(Location location) {
            int lat = (int) (location.getLatitude() * 1E6);
            int lng = (int) (location.getLongitude() * 1E6);

            Drawable marker=getResources().getDrawable(android.R.drawable.star_big_on);
            int markerWidth = marker.getIntrinsicWidth();
            int markerHeight = marker.getIntrinsicHeight();
            marker.setBounds(0, markerHeight, markerWidth, 0);


            myItemizedOverlay = new MyItemizedOverlay(marker);
            mapView.getOverlays().add(myItemizedOverlay);


            GeoPoint point = new GeoPoint(lat, lng);

            myItemizedOverlay.addItem(point, "myPoint1", "myPoint1");
            mapController.animateTo(point);
            String address = ConvertPointToLocation(point);
            Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();

            mapView.invalidate();

        }
}

以下は私のItemizedOverlayクラスです-

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem>{

    private ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>();

    public MyItemizedOverlay(Drawable marker) {
        super(boundCenterBottom(marker));
        // TODO Auto-generated constructor stub

        populate();
    }

    public void addItem(GeoPoint p, String title, String snippet){
        OverlayItem newItem = new OverlayItem(p, title, snippet);
        overlayItemList.add(newItem);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        // TODO Auto-generated method stub
        return overlayItemList.get(i);
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return overlayItemList.size();
    }

    public void clear() {
        overlayItemList.clear();
        populate();
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        // TODO Auto-generated method stub
        super.draw(canvas, mapView, shadow);
        //boundCenterBottom(marker);
    }

}
4

1 に答える 1

1

新しいアイテムを追加する前に、以前に追加したアイテムを削除する必要があります

public void addItem(GeoPoint p, String title, String snippet){
    OverlayItem newItem = new OverlayItem(p, title, snippet);
    overlayItemList.removeAll();
    overlayItemList.add(newItem);
    populate();
}
于 2012-08-12T15:14:05.340 に答える