diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk')
2 files changed, 92 insertions, 55 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java index b732d5a066..397ac1d0c9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java @@ -18,6 +18,7 @@ import com.mapbox.mapboxsdk.annotations.Icon; import com.mapbox.mapboxsdk.annotations.IconFactory; import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.MarkerView; +import com.mapbox.mapboxsdk.annotations.MarkerViewManager; import com.mapbox.mapboxsdk.annotations.MarkerViewOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.geometry.LatLng; @@ -61,23 +62,25 @@ public class AnimatedMarkerActivity extends AppCompatActivity { public void onMapReady(@NonNull final MapboxMap mapboxMap) { AnimatedMarkerActivity.this.mapboxMap = mapboxMap; setupMap(); - - for (int i = 0; i < 10; i++) { - addRandomCar(); - } - - addPassenger(); - addMainCar(); - animateMoveToPassenger(carMarker); + mapView.post(new Runnable() { + @Override + public void run() { + for (int i = 0; i < 10; i++) { + addRandomCar(); + } + addPassenger(); + addMainCar(); + } + }); } }); } private void setupMap() { CameraPosition cameraPosition = new CameraPosition.Builder() - .target(dupontCircle) - .zoom(15) - .build(); + .target(dupontCircle) + .zoom(15) + .build(); mapboxMap.setCameraPosition(cameraPosition); } @@ -86,10 +89,10 @@ public class AnimatedMarkerActivity extends AppCompatActivity { if (passengerMarker == null) { Icon icon = IconFactory.getInstance(AnimatedMarkerActivity.this) - .fromResource(R.drawable.ic_directions_run_black_24dp); + .fromResource(R.drawable.ic_directions_run_black_24dp); passengerMarker = mapboxMap.addMarker(new MarkerViewOptions() - .position(randomLatLng) - .icon(icon)); + .position(randomLatLng) + .icon(icon)); } else { passengerMarker.setPosition(randomLatLng); } @@ -99,13 +102,18 @@ public class AnimatedMarkerActivity extends AppCompatActivity { LatLng randomLatLng = getLatLngInBounds(); if (carMarker == null) { - carMarker = createCarMarker(randomLatLng, R.drawable.ic_taxi_top); + carMarker = createCarMarker(randomLatLng, R.drawable.ic_taxi_top, new MarkerViewManager.OnMarkerViewAddedListener() { + @Override + public void onViewAdded(@NonNull MarkerView markerView) { + // Make sure the car marker is selected so that it's always brought to the front (#5285) + mapboxMap.selectMarker(carMarker); + animateMoveToPassenger(carMarker); + } + }); + } else { carMarker.setPosition(randomLatLng); } - - // Make sure the car marker is selected so that it's always brought to the front (#5285) - mapboxMap.selectMarker(carMarker); } private void animateMoveToPassenger(final MarkerView car) { @@ -120,8 +128,12 @@ public class AnimatedMarkerActivity extends AppCompatActivity { } protected void addRandomCar() { - MarkerView car = createCarMarker(getLatLngInBounds(), R.drawable.ic_car_top); - randomlyMoveMarker(car); + createCarMarker(getLatLngInBounds(), R.drawable.ic_car_top, new MarkerViewManager.OnMarkerViewAddedListener() { + @Override + public void onViewAdded(@NonNull MarkerView markerView) { + randomlyMoveMarker(markerView); + } + }); } private void randomlyMoveMarker(final MarkerView marker) { @@ -140,7 +152,7 @@ public class AnimatedMarkerActivity extends AppCompatActivity { marker.setRotation((float) getBearing(marker.getPosition(), to)); final ValueAnimator markerAnimator = ObjectAnimator.ofObject( - marker, "position", new LatLngEvaluator(), marker.getPosition(), to); + marker, "position", new LatLngEvaluator(), marker.getPosition(), to); markerAnimator.setDuration((long) (10 * marker.getPosition().distanceTo(to))); markerAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); @@ -150,14 +162,14 @@ public class AnimatedMarkerActivity extends AppCompatActivity { return markerAnimator; } - private MarkerView createCarMarker(LatLng start, @DrawableRes int carResource) { + private MarkerView createCarMarker(LatLng start, @DrawableRes int carResource, MarkerViewManager.OnMarkerViewAddedListener listener) { Icon icon = IconFactory.getInstance(AnimatedMarkerActivity.this) - .fromResource(carResource); + .fromResource(carResource); //View Markers return mapboxMap.addMarker(new MarkerViewOptions() - .position(start) - .icon(icon)); + .position(start) + .icon(icon), listener); //GL Markers // return mapboxMap.addMarker(new MarkerOptions() @@ -170,9 +182,9 @@ public class AnimatedMarkerActivity extends AppCompatActivity { LatLngBounds bounds = mapboxMap.getProjection().getVisibleRegion().latLngBounds; Random generator = new Random(); double randomLat = bounds.getLatSouth() + generator.nextDouble() - * (bounds.getLatNorth() - bounds.getLatSouth()); + * (bounds.getLatNorth() - bounds.getLatSouth()); double randomLon = bounds.getLonWest() + generator.nextDouble() - * (bounds.getLonEast() - bounds.getLonWest()); + * (bounds.getLonEast() - bounds.getLonWest()); return new LatLng(randomLat, randomLon); } @@ -239,9 +251,9 @@ public class AnimatedMarkerActivity extends AppCompatActivity { @Override public LatLng evaluate(float fraction, LatLng startValue, LatLng endValue) { latLng.setLatitude(startValue.getLatitude() - + ((endValue.getLatitude() - startValue.getLatitude()) * fraction)); + + ((endValue.getLatitude() - startValue.getLatitude()) * fraction)); latLng.setLongitude(startValue.getLongitude() - + ((endValue.getLongitude() - startValue.getLongitude()) * fraction)); + + ((endValue.getLongitude() - startValue.getLongitude()) * fraction)); return latLng; } } @@ -256,7 +268,7 @@ public class AnimatedMarkerActivity extends AppCompatActivity { double lat2 = degrees2radians * to.getLatitude(); double a = Math.sin(lon2 - lon1) * Math.cos(lat2); double b = Math.cos(lat1) * Math.sin(lat2) - - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1); + - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1); return radians2degrees * Math.atan2(a, b); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewScaleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewScaleActivity.java index befa63cca0..762117ae7f 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewScaleActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewScaleActivity.java @@ -8,10 +8,12 @@ import android.view.MenuItem; import android.view.View; import android.widget.SeekBar; import android.widget.TextView; +import android.widget.Toast; import com.mapbox.mapboxsdk.annotations.Icon; import com.mapbox.mapboxsdk.annotations.IconFactory; import com.mapbox.mapboxsdk.annotations.MarkerView; +import com.mapbox.mapboxsdk.annotations.MarkerViewManager; import com.mapbox.mapboxsdk.annotations.MarkerViewOptions; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.maps.MapView; @@ -25,7 +27,9 @@ public class MarkerViewScaleActivity extends AppCompatActivity implements OnMapR private MapboxMap mapboxMap; private MapView mapView; - private View markerView; + + private MarkerView markerView; + private MarkerViewManager markerViewManager; @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,10 +45,6 @@ public class MarkerViewScaleActivity extends AppCompatActivity implements OnMapR actionBar.setDisplayShowHomeEnabled(true); } - final SeekBar xBar = (SeekBar) findViewById(R.id.seekbar_factor); - TextView textView = (TextView) findViewById(R.id.textview_factor); - xBar.setOnSeekBarChangeListener(new FactorChangeListener(textView)); - mapView = (MapView) findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); mapView.getMapAsync(this); @@ -53,17 +53,40 @@ public class MarkerViewScaleActivity extends AppCompatActivity implements OnMapR @Override public void onMapReady(MapboxMap map) { mapboxMap = map; + markerViewManager = map.getMarkerViewManager(); + + final SeekBar xBar = (SeekBar) findViewById(R.id.seekbar_factor); + final TextView textView = (TextView) findViewById(R.id.textview_factor); + + // We need to listen to a render event to be sure + // the View of the Marker has been added to the map + mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() { + @Override + public void onMapChanged(@MapView.MapChange int change) { + if (isMarkerRendered()) { + Toast.makeText(MarkerViewScaleActivity.this, "MarkerView is ready", Toast.LENGTH_SHORT).show(); + View view = markerViewManager.getView(markerView); + xBar.setOnSeekBarChangeListener(new FactorChangeListener(view, textView)); + xBar.setClickable(true); + mapView.removeOnMapChangedListener(this); + } + } + + private boolean isMarkerRendered() { + return markerView != null && markerViewManager.getView(markerView) != null; + } + }); + Icon icon = IconFactory.getInstance(MarkerViewScaleActivity.this) .fromResource(R.drawable.ic_circle); - MarkerView marker = mapboxMap.addMarker(new MarkerViewOptions() + markerView = mapboxMap.addMarker(new MarkerViewOptions() .position(new LatLng(38.907192, -77.036871)) .icon(icon) .flat(true)); - - markerView = mapboxMap.getMarkerViewManager().getView(marker); } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -76,30 +99,30 @@ public class MarkerViewScaleActivity extends AppCompatActivity implements OnMapR } @Override - protected void onStart() { - super.onStart(); - mapView.onStart(); - } - - @Override - protected void onResume() { + public void onResume() { super.onResume(); mapView.onResume(); } @Override - protected void onPause() { - super.onPause(); - mapView.onPause(); + public void onStart() { + super.onResume(); + mapView.onStart(); } @Override - protected void onStop() { + public void onStop(){ super.onStop(); mapView.onStop(); } @Override + public void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); @@ -117,11 +140,13 @@ public class MarkerViewScaleActivity extends AppCompatActivity implements OnMapR mapView.onLowMemory(); } - private class FactorChangeListener implements SeekBar.OnSeekBarChangeListener { + private static class FactorChangeListener implements SeekBar.OnSeekBarChangeListener { private TextView textView; + private View view; - public FactorChangeListener(TextView textView) { + FactorChangeListener(View view, TextView textView) { + this.view = view; this.textView = textView; } @@ -129,9 +154,9 @@ public class MarkerViewScaleActivity extends AppCompatActivity implements OnMapR public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { float newScale = getScale(progress); textView.setText(String.format(Locale.US, "Scale: %.1f", newScale)); - if (MarkerViewScaleActivity.this.markerView != null) { - markerView.setScaleX(newScale); - markerView.setScaleY(newScale); + if (view != null) { + view.setScaleX(newScale); + view.setScaleY(newScale); } } @@ -151,4 +176,4 @@ public class MarkerViewScaleActivity extends AppCompatActivity implements OnMapR } } -} +}
\ No newline at end of file |