7

पर एनिमेट मार्कर मेरे पास Google मानचित्र पर 3 markers है।पॉलीलाइन पथ

private void polyLine() { 

    LatLng starting = new LatLng(##.######, ##.######); 
    LatLng ending = new LatLng(##.######, ##.######); 

    PolylineOptions line = new PolylineOptions().add(starting, ending); 

    mGoogleMap.addMarker(new MarkerOptions().position(starting).title("Start")); 
    mGoogleMap.addMarker(new MarkerOptions().position(ending).title("End")); 

    mGoogleMap.addPolyline(line); 

} 
  1. :

    1. Two Markersstarting and ending points

    यहाँ दिखाने के लिए का उपयोग कर इन दो बिंदुओं के बीच एक पॉलीलाइन आकर्षित करने के लिए कोड है One Markerदिखाने के लिए[HUE_ROSE]

और animate marker to current location करने के लिए उपयोग:

@Override 
public void onLocationChanged(Location location) 
{ 
    Toast.makeText(this, "Location Changed " + location.getLatitude() 
      + location.getLongitude(), Toast.LENGTH_LONG).show(); 

    mLastLocation = location; 

    if (mCurrLocationMarker != null) { 
     mCurrLocationMarker.remove(); 
    } 

    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 

    if(ourGlobalMarker == null) { // First time adding marker to map 
     ourGlobalMarker = mGoogleMap.addMarker(new MarkerOptions().position(latLng) 
       .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE))); 
     MarkerAnimation.animateMarkerToICS(ourGlobalMarker, latLng, new LatLngInterpolator.Spherical()); 
     mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 18)); 
    } else { 
     MarkerAnimation.animateMarkerToICS(ourGlobalMarker, latLng, new LatLngInterpolator.Spherical()); 
     mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 18)); 
    } 

} 

समस्या:

Getting Animating Marker, but right side of Polyline

समाधान:

How Can I show Animated Marker on Polyline Path

मैं एक बहुत की कोशिश की इस एक के लिए solution लगता है, लेकिन did not find किसी भी बात के लिए, अपने suggestions साझा करें।

+0

[इस] (https://stackoverflow.com/q/40526350/6950238) प्रश्न और उत्तर पर एक नज़र डालें। –

+0

क्या आपका शेयर स्क्रीनशॉट और डेमो प्रोजेक्ट –

+0

@PhanVanLinh देख सकता है कि मैं अंत में यह प्राप्त करना चाहता हूं: stackoverflow.com/questions/46103680/map-and-moving-marker-using-google-maps-api यदि आप कर सकते हैं इसे प्राप्त करने में मेरी सहायता करें, इसका मतलब है कि आपने दोनों सवालों के जवाब दिए हैं :) मैंने पहले से ही दोनों प्रश्नों में मेरा अद्यतन कोड साझा किया है ... – Sophie

उत्तर

1

लंगर स्थापित करने के साथ बाहर की कोशिश करो की तरह

mDetailPositionMarker = mDetailGoogleMap.addMarker(new MarkerOptions() 
        .position(newLatLonValue) 
        .anchor(0.5f, 0.5f) 
        .rotation(bearingValue) 
        .flat(true) 
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.biketopicon))); 

इस प्रकार है और अपने आइकन किसी भी गद्दी या मार्जिन नहीं होने दिया जाएगा सुनिश्चित करें। नीचे दिखाए गए सामग्री की तुलना में आइकन छवि में अनावश्यक स्थान से बचें।

enter image description here

1

मैं आपके पास 3 मार्कर 1. स्रोत बिंदु 2. गंतव्य बिंदु 3. मार्कर

चलती यदि आप इस तरह की कोशिश करने के लिए है यह सोचते हैं रहा हूँ यह आप

private void animateMarkerNew(final LatLng startPosition, final LatLng destination, final Marker marker) { 

     if (marker != null) { 

      final LatLng endPosition = new LatLng(destination.latitude, destination.longitude); 

      final float startRotation = marker.getRotation(); 
      final LatLngInterpolatorNew latLngInterpolator = new LatLngInterpolatorNew.LinearFixed(); 

      ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1); 
      valueAnimator.setDuration(2000); // duration 3 second 
      valueAnimator.setInterpolator(new LinearInterpolator()); 
      valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
       @Override 
       public void onAnimationUpdate(ValueAnimator animation) { 
        try { 
         float v = animation.getAnimatedFraction(); 
         LatLng newPosition = latLngInterpolator.interpolate(v, startPosition, endPosition); 
         marker.setPosition(newPosition); 
         googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder() 
           .target(newPosition) 
           .zoom(18f) 
           .build())); 

         marker.setRotation(getBearing(startPosition, new LatLng(destination.latitude, destination.longitude))); 
        } catch (Exception ex) { 
         //I don't care atm.. 
        } 
       } 
      }); 
      valueAnimator.addListener(new AnimatorListenerAdapter() { 
       @Override 
       public void onAnimationEnd(Animator animation) { 
        super.onAnimationEnd(animation); 

        // if (mMarker != null) { 
        // mMarker.remove(); 
        // } 
        // mMarker = googleMap.addMarker(new MarkerOptions().position(endPosition).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_car))); 

       } 
      }); 
      valueAnimator.start(); 
     } 
    } 
में मदद मिलेगी

नोट: मार्कर का मतलब यह है कि आप किस मार्कर को एनिमेट करना चाहते हैं।

private interface LatLngInterpolatorNew { 
     LatLng interpolate(float fraction, LatLng a, LatLng b); 

     class LinearFixed implements LatLngInterpolatorNew { 
      @Override 
      public LatLng interpolate(float fraction, LatLng a, LatLng b) { 
       double lat = (b.latitude - a.latitude) * fraction + a.latitude; 
       double lngDelta = b.longitude - a.longitude; 
       // Take the shortest path across the 180th meridian. 
       if (Math.abs(lngDelta) > 180) { 
        lngDelta -= Math.signum(lngDelta) * 360; 
       } 
       double lng = lngDelta * fraction + a.longitude; 
       return new LatLng(lat, lng); 
      } 
     } 
    } 


//Method for finding bearing between two points 
private float getBearing(LatLng begin, LatLng end) { 
    double lat = Math.abs(begin.latitude - end.latitude); 
    double lng = Math.abs(begin.longitude - end.longitude); 

    if (begin.latitude < end.latitude && begin.longitude < end.longitude) 
     return (float) (Math.toDegrees(Math.atan(lng/lat))); 
    else if (begin.latitude >= end.latitude && begin.longitude < end.longitude) 
     return (float) ((90 - Math.toDegrees(Math.atan(lng/lat))) + 90); 
    else if (begin.latitude >= end.latitude && begin.longitude >= end.longitude) 
     return (float) (Math.toDegrees(Math.atan(lng/lat)) + 180); 
    else if (begin.latitude < end.latitude && begin.longitude >= end.longitude) 
     return (float) ((90 - Math.toDegrees(Math.atan(lng/lat))) + 270); 
    return -1; 
} 
+0

टाइम सेवर: '180 वें मेरिडियन में सबसे छोटा रास्ता लें' – Mbt925

0
// Animation handler for old APIs without animation support 
private void animateMarkerTo(final Marker marker, final double lat, final double lng) { 
    final Handler handler = new Handler(); 
    final long start = SystemClock.uptimeMillis(); 
    final long DURATION_MS = 3000; 
    final Interpolator interpolator = new AccelerateDecelerateInterpolator(); 
    final LatLng startPosition = marker.getPosition(); 
    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      float elapsed = SystemClock.uptimeMillis() - start; 
      float t = elapsed/DURATION_MS; 
      float v = interpolator.getInterpolation(t); 

      double currentLat = (lat - startPosition.latitude) * v + startPosition.latitude; 
      double currentLng = (lng - startPosition.longitude) * v + startPosition.longitude; 
      marker.setPosition(new LatLng(currentLat, currentLng)); 

      // if animation is not finished yet, repeat 
      if (t < 1) { 
       handler.postDelayed(this, 16); 
      } 
     } 
    }); 
} 

कॉल onLocationChange विधि के अंदर इस विधि और स्थान अक्षांश और लैंग तो आप एक जादू देखेंगे पारित;)

0

तुम क्यों मार्कर का उपयोग करने के बजाय नीले स्थान आइकन का उपयोग नहीं करते? ????

संबंधित मुद्दे