diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java index 567f0fc76..2e3a5335f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Style.java @@ -375,9 +375,16 @@ public class Style { /** *
- * Set the transition duration for style changes. + * Set the transition options for style changes. *
- * The default value for delay and duration is zero, so any changes take effect without animation. + * If not set, any changes take effect without animation, besides symbols, + * which will fade in/out with a default duration after symbol collision detection. + *+ * To disable symbols fade in/out animation, + * pass transition options with {@link TransitionOptions#enablePlacementTransitions} equal to false. + *
+ * Both {@link TransitionOptions#duration} and {@link TransitionOptions#delay} + * will also change the behavior of the symbols fade in/out animation if the placement transition is enabled. * * @param transitionOptions the transition options */ @@ -388,9 +395,17 @@ public class Style { /** *
- * Get the transition for style changes. + * Get the transition options for style changes. *
- * The default value for delay and transition is zero, so any changes take effect without animation. + * By default, any changes take effect without animation, besides symbols, + * which will fade in/out with a default duration after symbol collision detection. + *+ * To disable symbols fade in/out animation, + * pass transition options with {@link TransitionOptions#enablePlacementTransitions} equal to false + * into {@link #setTransition(TransitionOptions)}. + *
+ * Both {@link TransitionOptions#duration} and {@link TransitionOptions#delay}
+ * will also change the behavior of the symbols fade in/out animation if the placement transition is enabled.
*
* @return TransitionOptions the transition options
*/
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/TransitionOptions.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/TransitionOptions.java
index acbff20e9..3fa8400ee 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/TransitionOptions.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/TransitionOptions.java
@@ -1,8 +1,6 @@
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.Keep;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
/**
* Resembles transition property from the style specification.
@@ -15,6 +13,8 @@ public class TransitionOptions {
private long duration;
@Keep
private long delay;
+ @Keep
+ private boolean enablePlacementTransitions;
/**
* Create a transition property based on duration and a delay.
@@ -23,8 +23,21 @@ public class TransitionOptions {
* @param delay the delay to start the transition
*/
public TransitionOptions(long duration, long delay) {
+ this(duration, delay, true);
+ }
+
+ /**
+ * Create a transition property.
+ *
+ * @param duration the duration of the transition
+ * @param delay the delay to start the transition
+ * @param enablePlacementTransitions the flag that describes whether the fade in/out symbol placement transition
+ * should be enabled. Defaults to true.
+ */
+ public TransitionOptions(long duration, long delay, boolean enablePlacementTransitions) {
this.duration = duration;
this.delay = delay;
+ this.enablePlacementTransitions = enablePlacementTransitions;
}
/**
@@ -33,12 +46,30 @@ public class TransitionOptions {
* @param duration the duration of the transition
* @param delay the delay to start the transition
* @return a new transition property object
+ * @deprecated use {@link #fromTransitionOptions(long, long, boolean)} instead
*/
@Keep
+ @Deprecated
public static TransitionOptions fromTransitionOptions(long duration, long delay) {
+ // Invoked from JNI only
return new TransitionOptions(duration, delay);
}
+ /**
+ * Create a transition property.
+ *
+ * @param duration the duration of the transition
+ * @param delay the delay to start the transition
+ * @param enablePlacementTransitions the flag that describes whether the fade in/out symbol placement transition
+ * should be enabled. Defaults to true.
+ * @return a new transition property object
+ */
+ @Keep
+ static TransitionOptions fromTransitionOptions(long duration, long delay, boolean enablePlacementTransitions) {
+ // Invoked from JNI only
+ return new TransitionOptions(duration, delay, enablePlacementTransitions);
+ }
+
/**
* Get the transition duration.
*
@@ -57,8 +88,17 @@ public class TransitionOptions {
return delay;
}
+ /**
+ * Get the flag that describes whether the fade in/out symbol placement transition should be enabled.
+ *
+ * @return true if the fade in/out symbol placement transition should be enabled, false otherwise
+ */
+ public boolean isEnablePlacementTransitions() {
+ return enablePlacementTransitions;
+ }
+
@Override
- public boolean equals(@Nullable Object o) {
+ public boolean equals(Object o) {
if (this == o) {
return true;
}
@@ -71,22 +111,26 @@ public class TransitionOptions {
if (duration != that.duration) {
return false;
}
- return delay == that.delay;
+ if (delay != that.delay) {
+ return false;
+ }
+ return enablePlacementTransitions == that.enablePlacementTransitions;
}
@Override
public int hashCode() {
int result = (int) (duration ^ (duration >>> 32));
result = 31 * result + (int) (delay ^ (delay >>> 32));
+ result = 31 * result + (enablePlacementTransitions ? 1 : 0);
return result;
}
- @NonNull
@Override
public String toString() {
return "TransitionOptions{"
+ "duration=" + duration
+ ", delay=" + delay
+ + ", enablePlacementTransitions=" + enablePlacementTransitions
+ '}';
}
}
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/NativeMapViewTest.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/NativeMapViewTest.kt
index 40f74eae2..6958a3519 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/NativeMapViewTest.kt
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/NativeMapViewTest.kt
@@ -12,7 +12,7 @@ import com.mapbox.mapboxsdk.geometry.ProjectedMeters
import com.mapbox.mapboxsdk.maps.renderer.MapRenderer
import com.mapbox.mapboxsdk.style.layers.TransitionOptions
import com.mapbox.mapboxsdk.testapp.utils.TestConstants
-import junit.framework.Assert.assertEquals
+import junit.framework.Assert.*
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -325,6 +325,16 @@ class NativeMapViewTest {
fun testTransitionOptions() {
val transitionOptions = TransitionOptions(500, 500)
nativeMapView.transitionOptions = transitionOptions
+ assertTrue(transitionOptions.isEnablePlacementTransitions)
+ assertEquals(transitionOptions, nativeMapView.transitionOptions)
+ }
+
+ @Test
+ @UiThreadTest
+ fun testTransitionOptions_disablePlacementTransitions() {
+ val transitionOptions = TransitionOptions(500, 500, false)
+ nativeMapView.transitionOptions = transitionOptions
+ assertFalse(transitionOptions.isEnablePlacementTransitions)
assertEquals(transitionOptions, nativeMapView.transitionOptions)
}
diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp
index 405ecc5b7..e8bc14c8c 100755
--- a/platform/android/src/native_map_view.cpp
+++ b/platform/android/src/native_map_view.cpp
@@ -682,13 +682,15 @@ jni::Local