diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java index b732d5a066..397ac1d0c9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java @@ -18,6 +18,7 @@ import com.mapbox.mapboxsdk.annotations.Icon; import com.mapbox.mapboxsdk.annotations.IconFactory; import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.MarkerView; +import com.mapbox.mapboxsdk.annotations.MarkerViewManager; import com.mapbox.mapboxsdk.annotations.MarkerViewOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.geometry.LatLng; @@ -61,23 +62,25 @@ public class AnimatedMarkerActivity extends AppCompatActivity { public void onMapReady(@NonNull final MapboxMap mapboxMap) { AnimatedMarkerActivity.this.mapboxMap = mapboxMap; setupMap(); - - for (int i = 0; i < 10; i++) { - addRandomCar(); - } - - addPassenger(); - addMainCar(); - animateMoveToPassenger(carMarker); + mapView.post(new Runnable() { + @Override + public void run() { + for (int i = 0; i < 10; i++) { + addRandomCar(); + } + addPassenger(); + addMainCar(); + } + }); } }); } private void setupMap() { CameraPosition cameraPosition = new CameraPosition.Builder() - .target(dupontCircle) - .zoom(15) - .build(); + .target(dupontCircle) + .zoom(15) + .build(); mapboxMap.setCameraPosition(cameraPosition); } @@ -86,10 +89,10 @@ public class AnimatedMarkerActivity extends AppCompatActivity { if (passengerMarker == null) { Icon icon = IconFactory.getInstance(AnimatedMarkerActivity.this) - .fromResource(R.drawable.ic_directions_run_black_24dp); + .fromResource(R.drawable.ic_directions_run_black_24dp); passengerMarker = mapboxMap.addMarker(new MarkerViewOptions() - .position(randomLatLng) - .icon(icon)); + .position(randomLatLng) + .icon(icon)); } else { passengerMarker.setPosition(randomLatLng); } @@ -99,13 +102,18 @@ public class AnimatedMarkerActivity extends AppCompatActivity { LatLng randomLatLng = getLatLngInBounds(); if (carMarker == null) { - carMarker = createCarMarker(randomLatLng, R.drawable.ic_taxi_top); + carMarker = createCarMarker(randomLatLng, R.drawable.ic_taxi_top, new MarkerViewManager.OnMarkerViewAddedListener() { + @Override + public void onViewAdded(@NonNull MarkerView markerView) { + // Make sure the car marker is selected so that it's always brought to the front (#5285) + mapboxMap.selectMarker(carMarker); + animateMoveToPassenger(carMarker); + } + }); + } else { carMarker.setPosition(randomLatLng); } - - // Make sure the car marker is selected so that it's always brought to the front (#5285) - mapboxMap.selectMarker(carMarker); } private void animateMoveToPassenger(final MarkerView car) { @@ -120,8 +128,12 @@ public class AnimatedMarkerActivity extends AppCompatActivity { } protected void addRandomCar() { - MarkerView car = createCarMarker(getLatLngInBounds(), R.drawable.ic_car_top); - randomlyMoveMarker(car); + createCarMarker(getLatLngInBounds(), R.drawable.ic_car_top, new MarkerViewManager.OnMarkerViewAddedListener() { + @Override + public void onViewAdded(@NonNull MarkerView markerView) { + randomlyMoveMarker(markerView); + } + }); } private void randomlyMoveMarker(final MarkerView marker) { @@ -140,7 +152,7 @@ public class AnimatedMarkerActivity extends AppCompatActivity { marker.setRotation((float) getBearing(marker.getPosition(), to)); final ValueAnimator markerAnimator = ObjectAnimator.ofObject( - marker, "position", new LatLngEvaluator(), marker.getPosition(), to); + marker, "position", new LatLngEvaluator(), marker.getPosition(), to); markerAnimator.setDuration((long) (10 * marker.getPosition().distanceTo(to))); markerAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); @@ -150,14 +162,14 @@ public class AnimatedMarkerActivity extends AppCompatActivity { return markerAnimator; } - private MarkerView createCarMarker(LatLng start, @DrawableRes int carResource) { + private MarkerView createCarMarker(LatLng start, @DrawableRes int carResource, MarkerViewManager.OnMarkerViewAddedListener listener) { Icon icon = IconFactory.getInstance(AnimatedMarkerActivity.this) - .fromResource(carResource); + .fromResource(carResource); //View Markers return mapboxMap.addMarker(new MarkerViewOptions() - .position(start) - .icon(icon)); + .position(start) + .icon(icon), listener); //GL Markers // return mapboxMap.addMarker(new MarkerOptions() @@ -170,9 +182,9 @@ public class AnimatedMarkerActivity extends AppCompatActivity { LatLngBounds bounds = mapboxMap.getProjection().getVisibleRegion().latLngBounds; Random generator = new Random(); double randomLat = bounds.getLatSouth() + generator.nextDouble() - * (bounds.getLatNorth() - bounds.getLatSouth()); + * (bounds.getLatNorth() - bounds.getLatSouth()); double randomLon = bounds.getLonWest() + generator.nextDouble() - * (bounds.getLonEast() - bounds.getLonWest()); + * (bounds.getLonEast() - bounds.getLonWest()); return new LatLng(randomLat, randomLon); } @@ -239,9 +251,9 @@ public class AnimatedMarkerActivity extends AppCompatActivity { @Override public LatLng evaluate(float fraction, LatLng startValue, LatLng endValue) { latLng.setLatitude(startValue.getLatitude() - + ((endValue.getLatitude() - startValue.getLatitude()) * fraction)); + + ((endValue.getLatitude() - startValue.getLatitude()) * fraction)); latLng.setLongitude(startValue.getLongitude() - + ((endValue.getLongitude() - startValue.getLongitude()) * fraction)); + + ((endValue.getLongitude() - startValue.getLongitude()) * fraction)); return latLng; } } @@ -256,7 +268,7 @@ public class AnimatedMarkerActivity extends AppCompatActivity { double lat2 = degrees2radians * to.getLatitude(); double a = Math.sin(lon2 - lon1) * Math.cos(lat2); double b = Math.cos(lat1) * Math.sin(lat2) - - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1); + - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1); return radians2degrees * Math.atan2(a, b); } |