1+ package com .example .mapbox ;
2+
3+ import static com .mapbox .maps .plugin .gestures .GesturesUtils .getGestures ;
4+ import static com .mapbox .maps .plugin .locationcomponent .LocationComponentUtils .getLocationComponent ;
5+
6+ import android .Manifest ;
7+ import android .content .pm .PackageManager ;
8+ import android .os .Bundle ;
9+ import android .view .View ;
10+ import android .widget .Toast ;
11+
12+ import androidx .activity .result .ActivityResultCallback ;
13+ import androidx .activity .result .ActivityResultLauncher ;
14+ import androidx .activity .result .contract .ActivityResultContracts ;
15+ import androidx .annotation .NonNull ;
16+ import androidx .appcompat .app .AppCompatActivity ;
17+ import androidx .appcompat .content .res .AppCompatResources ;
18+ import androidx .core .app .ActivityCompat ;
19+
20+ import com .google .android .material .floatingactionbutton .FloatingActionButton ;
21+ import com .mapbox .android .gestures .MoveGestureDetector ;
22+ import com .mapbox .geojson .Point ;
23+ import com .mapbox .maps .CameraOptions ;
24+ import com .mapbox .maps .MapView ;
25+ import com .mapbox .maps .Style ;
26+ import com .mapbox .maps .plugin .LocationPuck2D ;
27+ import com .mapbox .maps .plugin .gestures .OnMoveListener ;
28+ import com .mapbox .maps .plugin .locationcomponent .LocationComponentPlugin ;
29+ import com .mapbox .maps .plugin .locationcomponent .OnIndicatorBearingChangedListener ;
30+ import com .mapbox .maps .plugin .locationcomponent .OnIndicatorPositionChangedListener ;
31+
32+ public class MainActivity extends AppCompatActivity {
33+ private MapView mapView ;
34+ FloatingActionButton floatingActionButton ;
35+
36+ private final ActivityResultLauncher <String > activityResultLauncher = registerForActivityResult (new ActivityResultContracts .RequestPermission (), new ActivityResultCallback <Boolean >() {
37+ @ Override
38+ public void onActivityResult (Boolean result ) {
39+ if (result ) {
40+ Toast .makeText (MainActivity .this , "Permission granted!" , Toast .LENGTH_SHORT ).show ();
41+ }
42+ }
43+ });
44+
45+ private final OnIndicatorBearingChangedListener onIndicatorBearingChangedListener = new OnIndicatorBearingChangedListener () {
46+ @ Override
47+ public void onIndicatorBearingChanged (double v ) {
48+ mapView .getMapboxMap ().setCamera (new CameraOptions .Builder ().bearing (v ).build ());
49+ }
50+ };
51+
52+ private final OnIndicatorPositionChangedListener onIndicatorPositionChangedListener = new OnIndicatorPositionChangedListener () {
53+ @ Override
54+ public void onIndicatorPositionChanged (@ NonNull Point point ) {
55+ mapView .getMapboxMap ().setCamera (new CameraOptions .Builder ().center (point ).zoom (20.0 ).build ());
56+ getGestures (mapView ).setFocalPoint (mapView .getMapboxMap ().pixelForCoordinate (point ));
57+ }
58+ };
59+
60+ private final OnMoveListener onMoveListener = new OnMoveListener () {
61+ @ Override
62+ public void onMoveBegin (@ NonNull MoveGestureDetector moveGestureDetector ) {
63+ getLocationComponent (mapView ).removeOnIndicatorBearingChangedListener (onIndicatorBearingChangedListener );
64+ getLocationComponent (mapView ).removeOnIndicatorPositionChangedListener (onIndicatorPositionChangedListener );
65+ getGestures (mapView ).removeOnMoveListener (onMoveListener );
66+ floatingActionButton .show ();
67+ }
68+
69+ @ Override
70+ public boolean onMove (@ NonNull MoveGestureDetector moveGestureDetector ) {
71+ return false ;
72+ }
73+
74+ @ Override
75+ public void onMoveEnd (@ NonNull MoveGestureDetector moveGestureDetector ) {
76+
77+ }
78+ };
79+
80+ @ Override
81+ protected void onCreate (Bundle savedInstanceState ) {
82+ super .onCreate (savedInstanceState );
83+ setContentView (R .layout .activity_main );
84+
85+ mapView = findViewById (R .id .mapView );
86+ floatingActionButton = findViewById (R .id .focusLocation );
87+
88+ if (ActivityCompat .checkSelfPermission (MainActivity .this , Manifest .permission .ACCESS_FINE_LOCATION ) != PackageManager .PERMISSION_GRANTED ) {
89+ activityResultLauncher .launch (Manifest .permission .ACCESS_FINE_LOCATION );
90+ }
91+
92+ floatingActionButton .hide ();
93+ mapView .getMapboxMap ().loadStyleUri (Style .SATELLITE , new Style .OnStyleLoaded () {
94+ @ Override
95+ public void onStyleLoaded (@ NonNull Style style ) {
96+ mapView .getMapboxMap ().setCamera (new CameraOptions .Builder ().zoom (20.0 ).build ());
97+ LocationComponentPlugin locationComponentPlugin = getLocationComponent (mapView );
98+ locationComponentPlugin .setEnabled (true );
99+ LocationPuck2D locationPuck2D = new LocationPuck2D ();
100+ locationPuck2D .setBearingImage (AppCompatResources .getDrawable (MainActivity .this , R .drawable .baseline_location_on_24 ));
101+ locationComponentPlugin .setLocationPuck (locationPuck2D );
102+ locationComponentPlugin .addOnIndicatorBearingChangedListener (onIndicatorBearingChangedListener );
103+ locationComponentPlugin .addOnIndicatorPositionChangedListener (onIndicatorPositionChangedListener );
104+ getGestures (mapView ).addOnMoveListener (onMoveListener );
105+
106+ floatingActionButton .setOnClickListener (new View .OnClickListener () {
107+ @ Override
108+ public void onClick (View view ) {
109+ locationComponentPlugin .addOnIndicatorBearingChangedListener (onIndicatorBearingChangedListener );
110+ locationComponentPlugin .addOnIndicatorPositionChangedListener (onIndicatorPositionChangedListener );
111+ getGestures (mapView ).addOnMoveListener (onMoveListener );
112+ floatingActionButton .hide ();
113+ }
114+ });
115+ }
116+ });
117+ }
118+ }
0 commit comments