From 566b108248b0b69a61d5e0c0efe3b7fda550e590 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 13 Nov 2015 17:26:53 +0100 Subject: [PATCH] [android] - #2658 improve window background PopupWindowView --- .../mapboxsdk/annotations/InfoWindow.java | 49 ++++++++++-------- .../annotations/InfoWindowTipView.java | 40 ++++++++++---- .../mapboxsdk/annotations/InfoWindowView.java | 5 +- .../bg_infowindow_content.9.png | Bin 0 -> 928 bytes .../main/res/layout/infowindow_content.xml | 22 +++++--- .../src/main/res/values/colors.xml | 1 + .../src/main/res/values/dimens.xml | 4 +- 7 files changed, 79 insertions(+), 42 deletions(-) create mode 100644 android/MapboxGLAndroidSDK/src/main/res/drawable-xxxhdpi/bg_infowindow_content.9.png 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 799d01d5c..0f9668be8 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 106e11820..d2afafc59 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 9b0a33925..80dc5931a 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); } } diff --git a/android/MapboxGLAndroidSDK/src/main/res/drawable-xxxhdpi/bg_infowindow_content.9.png b/android/MapboxGLAndroidSDK/src/main/res/drawable-xxxhdpi/bg_infowindow_content.9.png new file mode 100644 index 0000000000000000000000000000000000000000..584b3202994068beb34245aec06df3421c1e8cdf GIT binary patch literal 928 zcmeAS@N?(olHy`uVBq!ia0vp^89?m8!3HFyHf)&Az`&gD>EaktaqI0|Tkq&ZiMF{{ zeogfEje6U@_M5l!Z*Hrf@~b8X|JL5su{2?2_o6fbLGk5!X@*k;rf%z2YPw`8a&l3L z=8lf4U-uqXK2+^}&T__bz59FVca8>v>$UU!gid@mF*Q}=tIm|3m3CF^YS>llOJ-Ng zGTXD3XRUwrca=luv zsymlWlL_XL6ZO10{gUI$fKX#QbJ7byEX>4|`|i`LbEbtijVbG+$4oi@D8=O( z9Aw?&8t`Znzg6iZk(AJYP1B@<1H@S)MX$IzDvDq6bqr%I4GuWLx>V!Dss$pffdbBs z+am&IHLcTN&+*QBv1qwLBv6VQ1P8+O>H0(6~X+x zjS6+{SJx@jbHJFuUW@p_3?EJR9IVM1ddODjZs%VYE=FX(5Chv?8LPW|);2&797+Z*iOz5BI{oSc=ryZgD1 z9}TOIHYry$Y5!<4uDEVpxi41#s)W4!`88|TKD{zGrr>^){$7Uo0<&p374PyoPG^6d za;A5uwUN=MsB zxod4{`Sa)#6La(Mm!CcrIsTP@f9%+?IL^mYYMKPrKbJc4)URy1b!FazM@8zpPtT2d vwUe!I=j6Rl{pLyUm?15-?(vsQ-{ + android:paddingBottom="16dp" + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingTop="14dp"> + android:textSize="18sp" + android:textStyle="bold" /> diff --git a/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml b/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml index 55cf3fb1b..b87580661 100644 --- a/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml +++ b/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml @@ -2,6 +2,7 @@ #FFFFFF #000000 + #7D7F80 #1E8CAB @color/mapbox_blue diff --git a/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml b/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml index 088122006..dc09cc111 100644 --- a/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml +++ b/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml @@ -1,5 +1,7 @@ - 16dp + 20dp 8dp + -2dp + 1.5dp \ No newline at end of file