Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[android] fix custom marker views anchor issue
Browse files Browse the repository at this point in the history
  • Loading branch information
Guardiola31337 committed Jun 16, 2017
1 parent 6cba15f commit 44beaf5
Showing 1 changed file with 16 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView;

import com.mapbox.mapboxsdk.R;
Expand All @@ -33,6 +34,14 @@
public class MarkerViewManager implements MapView.OnMapChangedListener {

private final ViewGroup markerViewContainer;
private final ViewTreeObserver.OnPreDrawListener markerViewPreDrawObserver = new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
invalidateViewMarkersInVisibleRegion();
markerViewContainer.getViewTreeObserver().removeOnPreDrawListener(markerViewPreDrawObserver);
return false;
}
};
private final Map<MarkerView, View> markerViewMap = new HashMap<>();
private final LongSparseArray<OnMarkerViewAddedListener> markerViewAddedListenerMap = new LongSparseArray<>();
private final List<MapboxMap.MarkerViewAdapter> markerViewAdapters = new ArrayList<>();
Expand Down Expand Up @@ -180,14 +189,16 @@ public void updateMarkerViewsPosition() {
PointF point = mapboxMap.getProjection().toScreenLocation(marker.getPosition());
if (marker.getOffsetX() == MapboxConstants.UNMEASURED) {
// ensure view is measured first
// #6805 invalidate marker views to ensure convertView width and height
// values are properly measured and up to date
if (marker.getWidth() == 0) {
convertView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
if (convertView.getMeasuredWidth() != 0) {
marker.setWidth(convertView.getMeasuredWidth());
marker.setHeight(convertView.getMeasuredHeight());
}
convertView.getViewTreeObserver().addOnPreDrawListener(markerViewPreDrawObserver);
}
}

marker.setWidth(convertView.getWidth());
marker.setHeight(convertView.getHeight());

if (marker.getWidth() != 0) {
int x = (int) (marker.getAnchorU() * marker.getWidth());
int y = (int) (marker.getAnchorV() * marker.getHeight());
Expand Down

0 comments on commit 44beaf5

Please sign in to comment.