summaryrefslogtreecommitdiff
path: root/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java')
-rw-r--r--android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java49
1 files changed, 28 insertions, 21 deletions
diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java
index 799d01d5c0..0f9668be8f 100644
--- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java
+++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindow.java
@@ -92,45 +92,52 @@ final class InfoWindow {
float y = coords.y - mView.getMeasuredHeight() + offsetY;
// get right/left popup window
- float right = x + mView.getMeasuredWidth();
- float left = x;
+ float rightSideInfowWindow = x + mView.getMeasuredWidth();
+ float leftSideInfoWindow = x;
// get right/left map view
- float mapRight = mMapView.get().getRight();
- float mapLeft = mMapView.get().getLeft();
+ final float mapRight = mMapView.get().getRight();
+ final float mapLeft = mMapView.get().getLeft();
if (mView instanceof InfoWindowView) {
// only apply repositioning/margin for InfoWindowView
Resources resources = mMapView.get().getContext().getResources();
- float margin = resources.getDimension(R.dimen.infowindow_margin);
+ float marginHorizontal = resources.getDimension(R.dimen.infowindow_margin);
float tipViewOffset = resources.getDimension(R.dimen.infowindow_tipview_width) / 2;
float tipViewMarginLeft = mView.getMeasuredWidth() / 2 - tipViewOffset;
- // fit screen on right
- if (right > mMapView.get().getRight()) {
- x -= right - mapRight;
- tipViewMarginLeft += right - mapRight + tipViewOffset;
- right = x + mView.getMeasuredWidth();
+ boolean outOfBoundsLeft = false;
+ boolean outOfBoundsRight = false;
+
+ // if out of bounds right
+ if (rightSideInfowWindow > mapRight) {
+ outOfBoundsRight = true;
+ x -= rightSideInfowWindow - mapRight;
+ tipViewMarginLeft += rightSideInfowWindow - mapRight + tipViewOffset;
+ rightSideInfowWindow = x + mView.getMeasuredWidth();
}
// fit screen left
- if (left < mMapView.get().getLeft()) {
- x += mapLeft - left;
- tipViewMarginLeft -= mapLeft - left + tipViewOffset;
- left = x;
+ if (leftSideInfoWindow < mapLeft) {
+ outOfBoundsLeft = true;
+ x += mapLeft - leftSideInfoWindow;
+ tipViewMarginLeft -= mapLeft - leftSideInfoWindow + tipViewOffset;
+ leftSideInfoWindow = x;
}
// Add margin right
- if (mapRight - right < margin) {
- x -= margin - (mapRight - right);
- tipViewMarginLeft += margin - (mapRight - right) - tipViewOffset;
- left = x;
+ if (outOfBoundsRight && mapRight - rightSideInfowWindow < marginHorizontal) {
+ x -= marginHorizontal - (mapRight - rightSideInfowWindow);
+ tipViewMarginLeft += marginHorizontal - (mapRight - rightSideInfowWindow) - tipViewOffset;
+
+ leftSideInfoWindow = x;
}
// Add margin left
- if (left - mapLeft < margin) {
- x += margin - (left - mapLeft);
- tipViewMarginLeft -= (margin - (left - mapLeft)) - tipViewOffset;
+ if (outOfBoundsLeft && leftSideInfoWindow - mapLeft < marginHorizontal) {
+ x += marginHorizontal - (leftSideInfoWindow - mapLeft);
+ tipViewMarginLeft -= (marginHorizontal - (leftSideInfoWindow - mapLeft)) - tipViewOffset;
+
}
// Adjust tipView