diff options
Diffstat (limited to 'android/MapboxGLAndroidSDK/src/main/java')
3 files changed, 61 insertions, 33 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 diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindowTipView.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindowTipView.java index 106e11820a..d2afafc59d 100644 --- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindowTipView.java +++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindowTipView.java @@ -8,33 +8,55 @@ import android.graphics.Path; import android.util.AttributeSet; import android.view.View; +import com.mapbox.mapboxsdk.R; + final class InfoWindowTipView extends View { private Paint mPaint; private Path mPath; + private int mLineWidth; public InfoWindowTipView(Context context, AttributeSet attrs) { super(context, attrs); mPath = new Path(); - - this.mPaint = new Paint(); - this.mPaint.setColor(Color.WHITE); - this.mPaint.setAntiAlias(true); - this.mPaint.setStrokeWidth(0.0f); - this.mPaint.setStyle(Paint.Style.FILL); + mLineWidth = (int) context.getResources().getDimension(R.dimen.infowindow_line_width); + mPaint = new Paint(); + mPaint.setColor(Color.WHITE); + mPaint.setAntiAlias(true); + mPaint.setStrokeWidth(0.0f); + mPaint.setStyle(Paint.Style.FILL); } @Override protected void onDraw(Canvas canvas) { + super.onDraw(canvas); int height = getMeasuredHeight(); int width = getMeasuredWidth(); mPath.rewind(); - mPath.moveTo((width / 2) - height, 0); - mPath.lineTo((width / 2) + height, 0); + + this.mPaint.setColor(Color.WHITE); + this.mPaint.setAntiAlias(true); + this.mPaint.setStrokeWidth(0.0f); + this.mPaint.setStyle(Paint.Style.FILL); + + mPath.moveTo(0, 0); + mPath.lineTo(width, 0); mPath.lineTo((width / 2), height); - mPath.lineTo((width / 2) - height, 0); + mPath.lineTo(0, 0); + canvas.drawPath(mPath, this.mPaint); + + mPath.rewind(); + + this.mPaint.setColor(Color.parseColor("#C2C2C2")); + this.mPaint.setAntiAlias(true); + this.mPaint.setStrokeWidth(mLineWidth); + this.mPaint.setStyle(Paint.Style.STROKE); + + mPath.moveTo(0, 0); + mPath.lineTo(width / 2, height); + mPath.lineTo(width, 0); canvas.drawPath(mPath, this.mPaint); } } diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindowView.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindowView.java index 9b0a339252..80dc5931a7 100644 --- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindowView.java +++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/InfoWindowView.java @@ -32,8 +32,7 @@ class InfoWindowView extends RelativeLayout { void setTipViewMarginLeft(int marginLeft) { RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mTipView.getLayoutParams(); layoutParams.leftMargin = marginLeft; - // This is a bit of a hack but prevents an occasional 1 pixel gap between the InfoWindow and - // the tip - layoutParams.topMargin = -1; + // This is a bit of a hack but prevents an occasional gap between the InfoWindow + layoutParams.topMargin = (int) getResources().getDimension(R.dimen.infowindow_offset); } } |