2016-04-18 6 views
0

Ich muss in der Lage sein, bewegliche Autos mit Hier Karten Android SDK zu zeigen. Ist es in der aktuellen Version möglich? Ich habe versucht, das Map-Marker-Objekt in einer Render-ähnlichen Schleifenlogik wie folgt zu entfernen und hinzuzufügen:android hier sdk bewegende Markierungen

// this is a render like loop which is called in each 1 secs 
public void update(Map map, float deltaTime) { 

    float displacement = mCars.get(0).getVelocity() * deltaTime; 
    float delta = displacement/((float) Math.sqrt(2)); 

    MapMarker mapMarker = new MapMarker(); 
    Image image = new Image(); 
    image.setBitmap(mCars.get(0).getIcon().toBitmap()); 
    mapMarker.setCoordinate(mCars.get(0).getCoordinate()); 
    mapMarker.setIcon(image); 

    // remove old coordinate 
    map.removeMapObject(mapMarker); 

    mCars.get(0).addDelta(delta); 
    mapMarker.setCoordinate(mCars.get(0).getCoordinate()); 

    map.addMapObject(mapMarker); 
} 

Die removeMapObject() scheint nicht zu funktionieren. Irgendwelche Ideen, um ein bewegliches Kartenobjekt zu haben?

+0

Ich sah das gleiche Problem mit Google Maps Ich denke, wo die Bewegung war so zufällig, versuchen Sie eine benutzerdefinierte Animation, wo jeder Punkt auf den vorherigen warten müssen, um zu beenden –

Antwort

0

Das Problem hier war, jeden Marker zu erstellen und sie zu entfernen und sie erneut hinzuzufügen. Die Render-Schleife wäre die folgende;

// this is a render like loop which is called in each 1 secs 
public void update(Map map, float deltaTime) { 

    Timber.d("Before coordinate: %f %f", mCars.get(0).getCoordinate().getLatitude(), mCars.get(0).getCoordinate().getLongitude()); 

    map.removeMapObject(mCars.get(0).getMarker()); 

    mCars.get(0).addDelta(deltaTime); 

    map.addMapObject(mCars.get(0).getMarker()); 

    Timber.d("Update call, delta time: %f", deltaTime); 
} 

Der Aufruf addDelta() sollte die Marker-Koordinate und ihre eigenen Koordinaten aktualisieren;

public void addDelta(float deltaTime) { 

    if (mDestination.equals(mCoordinate)) { 
     return; 
    } 

    double deltaLatitude = mDestination.getLatitude() - mCoordinate.getLatitude(); 
    double deltaLongitude = mDestination.getLongitude() - mCoordinate.getLongitude(); 

    double lat = getCoordinate().getLatitude() + (0.01 * deltaLatitude); 
    double lng = getCoordinate().getLongitude() + (0.01 * deltaLongitude); 

    mCoordinate.setLatitude(lat); 
    mCoordinate.setLongitude(lng); 

    updateMarker(); 
} 

Und zuletzt, updateMarker Implementierung ist das Folgende;