From 3457eb1144d0f940598dbd6e281c7393a1d62f89 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 25 Oct 2016 17:36:26 +0200 Subject: [android] - MarkerView is responsible for managing height and width of a Marker (opposed to the recycled view). (#6809) --- .../mapbox/mapboxsdk/annotations/MarkerView.java | 24 +++++++++++++-- .../mapboxsdk/annotations/MarkerViewManager.java | 34 +++++++++++++--------- 2 files changed, 43 insertions(+), 15 deletions(-) (limited to 'platform') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java index b41eebff09..175fd57da4 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java @@ -21,11 +21,14 @@ public class MarkerView extends Marker { private MarkerViewManager markerViewManager; + private float width; + private float height; + private float anchorU; private float anchorV; - private float offsetX = -1; - private float offsetY = -1; + private float offsetX = MapboxConstants.UNMEASURED; + private float offsetY = MapboxConstants.UNMEASURED; private float infoWindowAnchorU; private float infoWindowAnchorV; @@ -41,6 +44,7 @@ public class MarkerView extends Marker { private boolean selected; + /** * Publicly hidden default constructor */ @@ -64,6 +68,22 @@ public class MarkerView extends Marker { this.selected = baseMarkerViewOptions.selected; } + float getWidth() { + return width; + } + + void setWidth(float width) { + this.width = width; + } + + float getHeight() { + return height; + } + + void setHeight(float height) { + this.height = height; + } + /** * Specifies the anchor being set on a particular point point of the MarkerView. *

diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java index 723e8383cd..cd333268a1 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java @@ -130,15 +130,19 @@ public class MarkerViewManager { PointF point = mapboxMap.getProjection().toScreenLocation(marker.getPosition()); if (marker.getOffsetX() == MapboxConstants.UNMEASURED) { // ensure view is measured first - if (convertView.getWidth() == 0) { + if (marker.getWidth() == 0) { convertView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); - } - if (convertView.getMeasuredWidth() != 0) { - int x = (int) (marker.getAnchorU() * convertView.getMeasuredWidth()); - int y = (int) (marker.getAnchorV() * convertView.getMeasuredHeight()); - marker.setOffset(x, y); + if (convertView.getMeasuredWidth() != 0) { + marker.setWidth(convertView.getMeasuredWidth()); + marker.setHeight(convertView.getMeasuredHeight()); + } } } + if (marker.getWidth() != 0) { + int x = (int) (marker.getAnchorU() * marker.getWidth()); + int y = (int) (marker.getAnchorV() * marker.getHeight()); + marker.setOffset(x, y); + } convertView.setX(point.x - marker.getOffsetX()); convertView.setY(point.y - marker.getOffsetY()); @@ -322,7 +326,7 @@ public class MarkerViewManager { if (adapter.getMarkerClass().equals(marker.getClass())) { if (adapter.prepareViewForReuse(marker, viewHolder)) { // reset offset for reuse - marker.setOffset(-1, -1); + marker.setOffset(MapboxConstants.UNMEASURED, MapboxConstants.UNMEASURED); adapter.releaseView(viewHolder); } } @@ -492,15 +496,19 @@ public class MarkerViewManager { } if (view != null) { - //Ensure the marker's view is measured first - if (view.getMeasuredWidth() == 0) { - view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); + if (marker.getWidth() == 0) { + if(view.getMeasuredWidth()==0) { + //Ensure the marker's view is measured first + view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); + } + marker.setWidth(view.getMeasuredWidth()); + marker.setHeight(view.getMeasuredHeight()); } // update position on map - if (marker.getOffsetX() == -1) { - int x = (int) (marker.getAnchorU() * view.getMeasuredWidth()); - int y = (int) (marker.getAnchorV() * view.getMeasuredHeight()); + if (marker.getOffsetX() == MapboxConstants.UNMEASURED) { + int x = (int) (marker.getAnchorU() * marker.getWidth()); + int y = (int) (marker.getAnchorV() * marker.getHeight()); marker.setOffset(x, y); } -- cgit v1.2.1