summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-10-25 17:36:26 +0200
committerGitHub <noreply@github.com>2016-10-25 17:36:26 +0200
commit3457eb1144d0f940598dbd6e281c7393a1d62f89 (patch)
treeccf8594c1514c60816c5d76aa75676931ae4f83d
parentb14e83ea403662f3e10b9bce95f9b78e5cacea39 (diff)
downloadqtlocation-mapboxgl-3457eb1144d0f940598dbd6e281c7393a1d62f89.tar.gz
[android] - MarkerView is responsible for managing height and width of a Marker (opposed to the recycled view). (#6809)
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java24
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java34
2 files changed, 43 insertions, 15 deletions
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.
* <p>
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);
}