2017-11-06 3 views
0

Ich habe Array-Liste von LatLong, die ich aus der Datenbank habe, muss ich Polylinie auf der Karte zeichnen, aber eins nach dem anderen (und nach ein paar Intervall) wollen auch den Marker bewegen.zeichnen Linie auf Google Karte auf Knopf klicken

Hier ist mein Code.

if (v.getId() == R.id.btnPlayBack) { 
     googleMap.clear(); 
     mStopHandler = true; 

     for (int i = 0; i < movementLine.size(); i++) { 
      marker.remove(); 
      LatLng latlng = new LatLng(movementLine.get(i).latitude, movementLine.get(i).longitude); 
      marker = googleMap.addMarker(new MarkerOptions() 
        .position(latlng) 
        .title("Position") 
        .snippet("Latitude:" + latlng.latitude + ", Longitude:" + latlng.longitude)); 


      googleMap.addPolyline(new PolylineOptions() 
        .add(new LatLng(latlng.latitude, latlng.longitude))); 

      animateMarker(googleMap, marker, new LatLng(latlng.latitude, latlng.longitude), false); 
     } 
    } 


private static void animateMarker(GoogleMap googleMap, final Marker marker, final LatLng toPosition, 
            final boolean hideMarker) { 
    final Handler handler = new Handler(); 
    final long start = SystemClock.uptimeMillis(); 
    Projection proj = googleMap.getProjection(); 
    Point startPoint = proj.toScreenLocation(marker.getPosition()); 
    final LatLng startLatLng = proj.fromScreenLocation(startPoint); 
    final long duration = 500; 

    final Interpolator interpolator = new LinearInterpolator(); 

    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      long elapsed = SystemClock.uptimeMillis() - start; 
      float t = interpolator.getInterpolation((float) elapsed 
        /duration); 
      double lng = t * toPosition.longitude + (1 - t) 
        * startLatLng.longitude; 
      double lat = t * toPosition.latitude + (1 - t) 
        * startLatLng.latitude; 
      marker.setPosition(new LatLng(lat, lng)); 

      if (t < 1.0) { 
       // Post again 16ms later. 
       handler.postDelayed(this, 16); 
      } else { 
       if (hideMarker) { 
        marker.setVisible(false); 
       } else { 
        marker.setVisible(true); 
       } 
      } 
     } 
    }); 
} 

aber es funktioniert nicht ist da ich habe etwas falsch gemacht? Ich möchte Bewegung des Markers mit Polylinie zeigen. hier, wenn ich

googleMap.addPolyline(new PolylineOptions() 
        .addAll(movementLine)); 

verwenden sie Route mit allen Punkt von Array ziehen wird list.but i eins nach dem anderen zeigen müssen. bitte helfen Sie mir heraus ..

Antwort

0

erstellen So wie hier:

PolylineOptions options = new PolylineOptions().width(5).color(Color.RED).geodesic(true); 
for (int z = 0; z < list.size(); z++) { 
    LatLng point = list.get(z); 
    options.add(point); 
} 
line = myMap.addPolyline(options); 

Ich bin auch nicht sicher, ob Sie geodätischen

+0

ich brauche Schleife mit Gewinde (Schlaf mit 3 sec verwenden sollten). Nach der ersten Zeile wird auf 3 Sekunden gewartet, dann wird die 2. Zeile gezogen und so weiter. – pratikSonawane

+0

Sie nicht Dauer in Ihrem Handler –

+0

BT Ich muss das für die Bewegung spielen spielen.so was kann ich tun? – pratikSonawane

0
if (v.getId() == R.id.btnPlayBack) { 

     final Handler handler = new Handler(); 
     timer = new Timer(); 
     TimerTask doAsynchronousTask = new TimerTask() { 
      @Override 
      public void run() { 
       handler.post(new Runnable() { 
        public void run() { 
         //callToFetchRecords(); 
         try { 
          PlayBack(); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } 
     }; 
     timer.schedule(doAsynchronousTask, 0, 2000); //execute in every 2 sec 
    } 
} 

private void PlayBack() { 
    LatLng latlng = new LatLng(movementLine.get(pos).latitude, movementLine.get(pos).longitude); 
     marker = googleMap.addMarker(new MarkerOptions() 
        .position(latlng) 
        .title("Staring Point") 
        .snippet("Latitude:" + latlng.latitude + ", Longitude:" + latlng.longitude)); 

     googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latlng, 19)); 
     options.add(latlng); 
     RoutePolyline = googleMap.addPolyline(options); 
     animateMarker(googleMap, marker, latlng, false); 
     pos++; }