summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-12-14 22:09:30 +0100
committerGitHub <noreply@github.com>2016-12-14 22:09:30 +0100
commit05c693555606d9184f0cb7cc24129353800dd21f (patch)
tree17372a24a055f3b6a8279d434f6d0f22d3f03fd9 /platform/android/MapboxGLAndroidSDKTestApp
parentf74de6731591ef11a75612b31f62877deb9f833c (diff)
downloadqtlocation-mapboxgl-05c693555606d9184f0cb7cc24129353800dd21f.tar.gz
[android] - add OnMarkerView add callback (#7429)
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp')
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java72
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewScaleActivity.java75
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view_scale.xml1
3 files changed, 93 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
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view_scale.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view_scale.xml
index afa769d58d..8f98b5bea2 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view_scale.xml
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view_scale.xml
@@ -39,6 +39,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
+ android:clickable="false"
android:layout_marginLeft="56dp"
android:progress="0" />