0

現在の場所を取得し、それにドローアブルを固定するMapActivityがあります。私の場所が変更されると(onchangedlocationメソッド)、地図上に別のピンポイントが表示されますが、最初のピンポイントは消えません。もう1つの問題は、onchangedlocationが、画面に触れるまで別のドローアブルを固定しないことです。すぐに表示するにはどうすればよいですか。このドローアブルで車の現在位置を表示して、GPSなどのように適切に移動するようにします。

これが私がピンポイントを追加する私の活動です。

public class CustomPinpoint extends ItemizedOverlay<OverlayItem>{


private ArrayList<OverlayItem> pinpoints = new ArrayList<OverlayItem>();
private Context c;


public CustomPinpoint(Drawable defaultMarker) {
    super(boundCenter(defaultMarker));
    // TODO Auto-generated constructor stub
}
public CustomPinpoint(Drawable m, Context context) {
    // TODO Auto-generated constructor stub
    this(m);
    c = context;
}

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



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

public void insertPinpoint(OverlayItem item){
    pinpoints.add(item);
    this.populate();
}
  }

そして私はこれを私のoncreateメソッドで使用します:

    lm= (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria crit = new Criteria();

        towers = lm.getBestProvider(crit, false);
        final Location location = lm.getLastKnownLocation(towers);

        if(location != null){
            latit = (int) (location.getLatitude() *1E6);
            longi = (int) (location.getLongitude() *1E6);
            ourLocation = new GeoPoint(latit, longi);
            controller.animateTo(ourLocation);
            controller.setZoom(14);

            if//myItemizedOverlay.addItem(ourLocation, "myPoint1", "myPoint1");
            OverlayItem overlayItem = new OverlayItem(ourLocation, "What's up", "2nd String");
            CustomPinpoint custom = new CustomPinpoint(d, Map.this);
            custom.insertPinpoint(overlayItem);
            overlayList.add(custom);}
            map.setSatellite(false);
            map.setStreetView(true);

これは私のonlocationchangedです

   public void onLocationChanged(Location l) {
    // TODO Auto-generated method stub
    latit = (int) (l.getLatitude() *1E6);
    longi = (int) (l.getLongitude() *1E6);
    GeoPoint ourLocation = new GeoPoint(latit, longi);
    OverlayItem overlayItem = new OverlayItem(ourLocation, "What's up", "2nd String");
    CustomPinpoint custom = new CustomPinpoint(d, Map.this);
    custom.insertPinpoint(overlayItem);
    overlayList.add(custom);
}

現在の場所にある複数のドローアブルの場合、解決策は最後に追加されたピンポイント(ジオポイント)のみを表示することだと思いましたが、これを行う方法がわかりません。

両方の問題について私を助けていただければ幸いです。ありがとうございました !

PS:デバイスが車の中など、ある速度で動くものの中にあるとき、ドローアブルが継続的に動いているように見える必要があります。

4

2 に答える 2

3
 In the onlocationchaged method,add the following line,so that it will make your previous pin disappear..if(!mapOverlays.isEmpty()) 
 { 
 mapOverlays.clear(); 
 mapView.invalidate();}
于 2012-05-24T19:23:02.580 に答える
1

コードにoverlayListの定義が表示されませんが、タイプが必要だと思いますArrayList<OverlayItem>

したがって、overlayList.add(custom)を実行する前に、overlayList.clear()を呼び出す必要があります。これにより、最新の位置のマーカーだけが残ります。表示を更新する限り、.addするときにそれを行うべきだと思いました。マップビューで.invalidate()をいつでも呼び出して、それが役立つかどうかを確認できると思います

于 2012-05-24T18:59:27.033 に答える