Animare l'indicatore sul path Polyline

Ho 3 markers su una mappa di Google.

  1. Two Markers per mostrare starting and ending points

Ecco il codice che utilizza per disegnare una polilinea tra questi due punti:

  • Gestione dei database con 2 processi
  • Utilizzando intenti per passare i dati tra le attività in android
  • Canvas - ingrandimento, spostamento e ridimensionamento su Android
  • Ascolto pulsanti Home
  • Come rendere il badge applicativo su android?
  • Rilasciare system.img su un dispositivo
  •  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. One Marker per visualizzare current Location [HUE_ROSE]

    E animate marker to current location utilizzando:

     @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)); } } 

    PROBLEMA:

    Getting Animating Marker, but right side of Polyline

    SOLUZIONE:

    How Can I show Animated Marker on Polyline Path

    Ho provato molto a trovare una solution per questo, ma did not find niente, condividi i tuoi suggestions .

  • Rotazione personalizzata di una vista image
  • resources.ap_ non esiste quando compila il mio progetto android
  • i methods di thread deprecati non sono supportti
  • Nuovi dispositivi Samsung non possono visualizzare pagine web nell'applicazione SMS incorporata
  • ImageView OutofMemoryException
  • will android java support lambda espressione in java 8?
  • 4 Solutions collect form web for “Animare l'indicatore sul path Polyline”

    Prova ad impostare l'ancoraggio come segue

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

    E assicuratevi che la tua icona non avrà alcun imbottitura o margine. Evita spazio inutilizzabile nell'image di icona rispetto al contenuto come mostrato di seguito.

    immettere qui la descrizione dell'immagine

    Suppongo che tu abbia 3 marcatore 1. Punto di origine 2. Punto di destinazione 3. Spostando il marcatore

    devi provare in questo modo ti aiuterà

     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(); } } 

    Nota: il marcatore significa quale marcatore vuoi animare quella.

      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; } 
      // 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); } } }); } 

    call questo metodo all'interno del metodo onLocationChange e passare lat latino e lang poi vednetworking una magia;)

    Perché non utilizzare l'icona di posizione blu invece di utilizzare il marcatore ?????

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.