47
47
48
48
import timber .log .Timber ;
49
49
50
+ import static com .mapbox .mapboxsdk .maps .widgets .CompassView .TIME_MAP_NORTH_ANIMATION ;
51
+ import static com .mapbox .mapboxsdk .maps .widgets .CompassView .TIME_WAIT_IDLE ;
52
+
50
53
/**
51
54
* <p>
52
55
* A {@code MapView} provides an embeddable map interface.
@@ -73,6 +76,7 @@ public class MapView extends FrameLayout {
73
76
74
77
private MyLocationView myLocationView ;
75
78
private CompassView compassView ;
79
+ private PointF focalPoint ;
76
80
private ImageView attrView ;
77
81
private ImageView logoView ;
78
82
@@ -143,7 +147,7 @@ private void initialiseMap() {
143
147
addOnMapChangedListener (mapCallback );
144
148
145
149
// callback for focal point invalidation
146
- FocalPointInvalidator focalPoint = new FocalPointInvalidator (compassView );
150
+ final FocalPointInvalidator focalPointInvalidator = new FocalPointInvalidator (createFocalPointChangeListener () );
147
151
148
152
// callback for registering touch listeners
149
153
RegisterTouchListener registerTouchListener = new RegisterTouchListener ();
@@ -152,13 +156,15 @@ private void initialiseMap() {
152
156
CameraZoomInvalidator zoomInvalidator = new CameraZoomInvalidator ();
153
157
154
158
// callback for camera change events
155
- CameraChangeDispatcher cameraChangeDispatcher = new CameraChangeDispatcher ();
159
+ final CameraChangeDispatcher cameraChangeDispatcher = new CameraChangeDispatcher ();
156
160
157
161
// setup components for MapboxMap creation
158
162
Projection proj = new Projection (nativeMapView );
159
- UiSettings uiSettings = new UiSettings (proj , focalPoint , compassView , attrView , logoView );
160
- TrackingSettings trackingSettings = new TrackingSettings (myLocationView , uiSettings , focalPoint , zoomInvalidator );
161
- MyLocationViewSettings myLocationViewSettings = new MyLocationViewSettings (myLocationView , proj , focalPoint );
163
+ UiSettings uiSettings = new UiSettings (proj , focalPointInvalidator , compassView , attrView , logoView );
164
+ TrackingSettings trackingSettings = new TrackingSettings (myLocationView , uiSettings , focalPointInvalidator ,
165
+ zoomInvalidator );
166
+ MyLocationViewSettings myLocationViewSettings = new MyLocationViewSettings (myLocationView , proj ,
167
+ focalPointInvalidator );
162
168
LongSparseArray <Annotation > annotationsArray = new LongSparseArray <>();
163
169
MarkerViewManager markerViewManager = new MarkerViewManager ((ViewGroup ) findViewById (R .id .markerViewContainer ));
164
170
IconManager iconManager = new IconManager (nativeMapView );
@@ -182,8 +188,9 @@ private void initialiseMap() {
182
188
MapZoomControllerListener zoomListener = new MapZoomControllerListener (mapGestureDetector , uiSettings , transform );
183
189
mapZoomButtonController .bind (uiSettings , zoomListener );
184
190
191
+ compassView .injectCompassAnimationListener (createCompassAnimationListener (cameraChangeDispatcher ));
192
+ compassView .setOnClickListener (createCompassClickListener (cameraChangeDispatcher ));
185
193
// inject widgets with MapboxMap
186
- compassView .setMapboxMap (mapboxMap );
187
194
myLocationView .setMapboxMap (mapboxMap );
188
195
attrView .setOnClickListener (new AttributionDialogManager (context , mapboxMap ));
189
196
@@ -205,6 +212,49 @@ private void initialiseMap() {
205
212
}
206
213
}
207
214
215
+ private FocalPointChangeListener createFocalPointChangeListener () {
216
+ return new FocalPointChangeListener () {
217
+ @ Override
218
+ public void onFocalPointChanged (PointF pointF ) {
219
+ focalPoint = pointF ;
220
+ }
221
+ };
222
+ }
223
+
224
+ private MapboxMap .OnCompassAnimationListener createCompassAnimationListener (final CameraChangeDispatcher
225
+ cameraChangeDispatcher ) {
226
+ return new MapboxMap .OnCompassAnimationListener () {
227
+ @ Override
228
+ public void onCompassAnimation () {
229
+ cameraChangeDispatcher .onCameraMove ();
230
+ }
231
+
232
+ @ Override
233
+ public void onCompassAnimationFinished () {
234
+ compassView .isAnimating (false );
235
+ cameraChangeDispatcher .onCameraIdle ();
236
+ }
237
+ };
238
+ }
239
+
240
+ private OnClickListener createCompassClickListener (final CameraChangeDispatcher cameraChangeDispatcher ) {
241
+ return new OnClickListener () {
242
+ @ Override
243
+ public void onClick (View v ) {
244
+ if (mapboxMap != null && compassView != null ) {
245
+ if (focalPoint != null ) {
246
+ mapboxMap .setFocalBearing (0 , focalPoint .x , focalPoint .y , TIME_MAP_NORTH_ANIMATION );
247
+ } else {
248
+ mapboxMap .setFocalBearing (0 , mapboxMap .getWidth () / 2 , mapboxMap .getHeight () / 2 , TIME_MAP_NORTH_ANIMATION );
249
+ }
250
+ cameraChangeDispatcher .onCameraMoveStarted (MapboxMap .OnCameraMoveStartedListener .REASON_API_ANIMATION );
251
+ compassView .isAnimating (true );
252
+ compassView .postDelayed (compassView , TIME_WAIT_IDLE + TIME_MAP_NORTH_ANIMATION );
253
+ }
254
+ }
255
+ };
256
+ }
257
+
208
258
//
209
259
// Lifecycle events
210
260
//
0 commit comments