@@ -93,12 +93,12 @@ public class DefaultClusterRenderer<T extends ClusterItem> implements ClusterRen
93
93
/**
94
94
* Icons for each bucket.
95
95
*/
96
- private SparseArray <BitmapDescriptor > mIcons = new SparseArray <BitmapDescriptor >();
96
+ private SparseArray <BitmapDescriptor > mIcons = new SparseArray <>();
97
97
98
98
/**
99
99
* Markers for single ClusterItems.
100
100
*/
101
- private MarkerCache <T > mMarkerCache = new MarkerCache <T >();
101
+ private MarkerCache <T > mMarkerCache = new MarkerCache <>();
102
102
103
103
/**
104
104
* If cluster size is less than this size, display individual markers.
@@ -111,10 +111,9 @@ public class DefaultClusterRenderer<T extends ClusterItem> implements ClusterRen
111
111
private Set <? extends Cluster <T >> mClusters ;
112
112
113
113
/**
114
- * Lookup between markers and the associated cluster .
114
+ * Markers for Clusters .
115
115
*/
116
- private Map <Marker , Cluster <T >> mMarkerToCluster = new HashMap <Marker , Cluster <T >>();
117
- private Map <Cluster <T >, Marker > mClusterToMarker = new HashMap <Cluster <T >, Marker >();
116
+ private MarkerCache <Cluster <T >> mClusterMarkerCache = new MarkerCache <>();
118
117
119
118
/**
120
119
* The target zoom level for the current set of clusters.
@@ -160,15 +159,15 @@ public void onInfoWindowClick(Marker marker) {
160
159
mClusterManager .getClusterMarkerCollection ().setOnMarkerClickListener (new GoogleMap .OnMarkerClickListener () {
161
160
@ Override
162
161
public boolean onMarkerClick (Marker marker ) {
163
- return mClickListener != null && mClickListener .onClusterClick (mMarkerToCluster .get (marker ));
162
+ return mClickListener != null && mClickListener .onClusterClick (mClusterMarkerCache .get (marker ));
164
163
}
165
164
});
166
165
167
166
mClusterManager .getClusterMarkerCollection ().setOnInfoWindowClickListener (new GoogleMap .OnInfoWindowClickListener () {
168
167
@ Override
169
168
public void onInfoWindowClick (Marker marker ) {
170
169
if (mInfoWindowClickListener != null ) {
171
- mInfoWindowClickListener .onClusterInfoWindowClick (mMarkerToCluster .get (marker ));
170
+ mInfoWindowClickListener .onClusterInfoWindowClick (mClusterMarkerCache .get (marker ));
172
171
}
173
172
}
174
173
});
@@ -216,7 +215,7 @@ protected String getClusterText(int bucket) {
216
215
if (bucket < BUCKETS [0 ]) {
217
216
return String .valueOf (bucket );
218
217
}
219
- return String . valueOf ( bucket ) + "+" ;
218
+ return bucket + "+" ;
220
219
}
221
220
222
221
/**
@@ -389,7 +388,7 @@ public void run() {
389
388
// markers to animate from.
390
389
List <Point > existingClustersOnScreen = null ;
391
390
if (DefaultClusterRenderer .this .mClusters != null && mAnimate ) {
392
- existingClustersOnScreen = new ArrayList <Point >();
391
+ existingClustersOnScreen = new ArrayList <>();
393
392
for (Cluster <T > c : DefaultClusterRenderer .this .mClusters ) {
394
393
if (shouldRenderAsCluster (c ) && visibleBounds .contains (c .getPosition ())) {
395
394
Point point = mSphericalMercatorProjection .toPoint (c .getPosition ());
@@ -428,7 +427,7 @@ public void run() {
428
427
// markers to animate from.
429
428
List <Point > newClustersOnScreen = null ;
430
429
if (mAnimate ) {
431
- newClustersOnScreen = new ArrayList <Point >();
430
+ newClustersOnScreen = new ArrayList <>();
432
431
for (Cluster <T > c : clusters ) {
433
432
if (shouldRenderAsCluster (c ) && visibleBounds .contains (c .getPosition ())) {
434
433
Point p = mSphericalMercatorProjection .toPoint (c .getPosition ());
@@ -528,11 +527,11 @@ private class MarkerModifier extends Handler implements MessageQueue.IdleHandler
528
527
private final Lock lock = new ReentrantLock ();
529
528
private final Condition busyCondition = lock .newCondition ();
530
529
531
- private Queue <CreateMarkerTask > mCreateMarkerTasks = new LinkedList <CreateMarkerTask >();
532
- private Queue <CreateMarkerTask > mOnScreenCreateMarkerTasks = new LinkedList <CreateMarkerTask >();
533
- private Queue <Marker > mRemoveMarkerTasks = new LinkedList <Marker >();
534
- private Queue <Marker > mOnScreenRemoveMarkerTasks = new LinkedList <Marker >();
535
- private Queue <AnimationTask > mAnimationTasks = new LinkedList <AnimationTask >();
530
+ private Queue <CreateMarkerTask > mCreateMarkerTasks = new LinkedList <>();
531
+ private Queue <CreateMarkerTask > mOnScreenCreateMarkerTasks = new LinkedList <>();
532
+ private Queue <Marker > mRemoveMarkerTasks = new LinkedList <>();
533
+ private Queue <Marker > mOnScreenRemoveMarkerTasks = new LinkedList <>();
534
+ private Queue <AnimationTask > mAnimationTasks = new LinkedList <>();
536
535
537
536
/**
538
537
* Whether the idle listener has been added to the UI thread's MessageQueue.
@@ -659,10 +658,8 @@ private void performNextTask() {
659
658
}
660
659
661
660
private void removeMarker (Marker m ) {
662
- Cluster <T > cluster = mMarkerToCluster .get (m );
663
- mClusterToMarker .remove (cluster );
664
661
mMarkerCache .remove (m );
665
- mMarkerToCluster .remove (m );
662
+ mClusterMarkerCache .remove (m );
666
663
mClusterManager .getMarkerManager ().remove (m );
667
664
}
668
665
@@ -715,8 +712,8 @@ public boolean queueIdle() {
715
712
* A cache of markers representing individual ClusterItems.
716
713
*/
717
714
private static class MarkerCache <T > {
718
- private Map <T , Marker > mCache = new HashMap <T , Marker >();
719
- private Map <Marker , T > mCacheReverse = new HashMap <Marker , T >();
715
+ private Map <T , Marker > mCache = new HashMap <>();
716
+ private Map <Marker , T > mCacheReverse = new HashMap <>();
720
717
721
718
public Marker get (T item ) {
722
719
return mCache .get (item );
@@ -799,7 +796,7 @@ public T getClusterItem(Marker marker) {
799
796
* @return a marker from a cluster or null if it does not exists
800
797
*/
801
798
public Marker getMarker (Cluster <T > cluster ) {
802
- return mClusterToMarker .get (cluster );
799
+ return mClusterMarkerCache .get (cluster );
803
800
}
804
801
805
802
/**
@@ -809,7 +806,7 @@ public Marker getMarker(Cluster<T> cluster) {
809
806
* @return a Cluster from a marker or null if it does not exists
810
807
*/
811
808
public Cluster <T > getCluster (Marker marker ) {
812
- return mMarkerToCluster .get (marker );
809
+ return mClusterMarkerCache .get (marker );
813
810
}
814
811
815
812
/**
@@ -869,15 +866,14 @@ private void perform(MarkerModifier markerModifier) {
869
866
return ;
870
867
}
871
868
872
- Marker marker = mClusterToMarker .get (cluster );
869
+ Marker marker = mClusterMarkerCache .get (cluster );
873
870
MarkerWithPosition markerWithPosition ;
874
871
if (marker == null ) {
875
872
MarkerOptions markerOptions = new MarkerOptions ().
876
873
position (animateFrom == null ? cluster .getPosition () : animateFrom );
877
874
onBeforeClusterRendered (cluster , markerOptions );
878
875
marker = mClusterManager .getClusterMarkerCollection ().addMarker (markerOptions );
879
- mMarkerToCluster .put (marker , cluster );
880
- mClusterToMarker .put (cluster , marker );
876
+ mClusterMarkerCache .put (cluster , marker );
881
877
markerWithPosition = new MarkerWithPosition (marker );
882
878
if (animateFrom != null ) {
883
879
markerModifier .animate (markerWithPosition , animateFrom , cluster .getPosition ());
@@ -950,10 +946,8 @@ public void perform() {
950
946
@ Override
951
947
public void onAnimationEnd (Animator animation ) {
952
948
if (mRemoveOnComplete ) {
953
- Cluster <T > cluster = mMarkerToCluster .get (marker );
954
- mClusterToMarker .remove (cluster );
955
949
mMarkerCache .remove (marker );
956
- mMarkerToCluster .remove (marker );
950
+ mClusterMarkerCache .remove (marker );
957
951
mMarkerManager .remove (marker );
958
952
}
959
953
markerWithPosition .position = to ;
0 commit comments