diff --git a/android/src/main/java/com/luggmaps/LuggPolylineView.kt b/android/src/main/java/com/luggmaps/LuggPolylineView.kt index 77f63ff..6125ebf 100644 --- a/android/src/main/java/com/luggmaps/LuggPolylineView.kt +++ b/android/src/main/java/com/luggmaps/LuggPolylineView.kt @@ -8,6 +8,7 @@ import com.google.android.gms.maps.model.Polyline interface LuggPolylineViewDelegate { fun polylineViewDidUpdate(polylineView: LuggPolylineView) + fun polylineViewDidDrop(polylineView: LuggPolylineView) } data class AnimatedOptions(val duration: Long = 2150L, val easing: String = "linear", val trailLength: Float = 1f, val delay: Long = 0L) @@ -67,8 +68,8 @@ class LuggPolylineView(context: Context) : ReactViewGroup(context) { } fun onDropViewInstance() { + delegate?.polylineViewDidDrop(this) delegate = null - polyline?.remove() polyline = null } } diff --git a/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt b/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt index 58f6626..0283d3e 100644 --- a/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt +++ b/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt @@ -598,6 +598,10 @@ class GoogleMapProvider(private val context: Context) : syncPolylineView(polylineView) } + override fun polylineViewDidDrop(polylineView: LuggPolylineView) { + teardownPolyline(polylineView) + } + // endregion // region PolygonViewDelegate @@ -773,8 +777,12 @@ class GoogleMapProvider(private val context: Context) : } override fun removePolylineView(polylineView: LuggPolylineView) { - polylineAnimators[polylineView]?.destroy() - polylineAnimators.remove(polylineView) + teardownPolyline(polylineView) + } + + private fun teardownPolyline(polylineView: LuggPolylineView) { + pendingPolylineViews.remove(polylineView) + polylineAnimators.remove(polylineView)?.destroy() polylineView.polyline?.remove() polylineView.polyline = null } @@ -812,6 +820,8 @@ class GoogleMapProvider(private val context: Context) : private fun addPolylineViewToMap(polylineView: LuggPolylineView) { val map = googleMap ?: return + polylineAnimators.remove(polylineView)?.destroy() + val options = PolylineOptions() .width(polylineView.strokeWidth.dpToPx()) .zIndex(polylineView.zIndex) diff --git a/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt b/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt index 5a9dbcb..1b697bc 100644 --- a/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt +++ b/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt @@ -249,7 +249,7 @@ class PolylineAnimator { // Clear spans before setting points to prevent IndexOutOfBoundsException // when the new points list is shorter than what existing spans reference poly.color = strokeColors.firstOrNull() ?: Color.BLACK - poly.points = ArrayList(reusablePoints) + poly.points = reusablePoints if (strokeColors.size > 1) { val segmentCount = reusablePoints.size - 1