[android] #5115 - add visible integration to MarkerView

This commit is contained in:
Tobrun Van Nuland
2016-05-24 14:45:51 +02:00
committed by Tobrun Van Nuland
parent 1d7d8a9f2f
commit 621bb01845
4 changed files with 38 additions and 6 deletions

View File

@@ -28,6 +28,7 @@ public abstract class BaseMarkerViewOptions<U extends MarkerView, T extends Base
protected int selectAnimRes;
protected int deselectAnimRes;
protected int rotation;
protected boolean visible = true;
public BaseMarkerViewOptions() {
centerOffset = new PointF();
@@ -84,6 +85,11 @@ public abstract class BaseMarkerViewOptions<U extends MarkerView, T extends Base
return getThis();
}
public T visible(boolean visible){
this.visible = visible;
return getThis();
}
public LatLng getPosition() {
return position;
}
@@ -124,6 +130,10 @@ public abstract class BaseMarkerViewOptions<U extends MarkerView, T extends Base
return rotation;
}
public boolean isVisible() {
return visible;
}
public abstract T getThis();
public abstract U getMarker();

View File

@@ -12,6 +12,7 @@ public class MarkerView extends Marker {
private PointF centerOffset;
private Point infoWindowOffset;
private boolean flat;
private boolean visible;
private int selectAnimRes;
private int deselectAnimRes;
@@ -82,6 +83,17 @@ public class MarkerView extends Marker {
this.tiltValue = tiltValue;
}
public void setVisible(boolean visible) {
this.visible = visible;
if (markerViewManager != null) {
markerViewManager.animateVisible(this, visible);
}
}
public boolean isVisible() {
return visible;
}
public void setRotation(float rotation) {
this.rotation = rotation;
if (markerViewManager != null) {

View File

@@ -49,6 +49,13 @@ public class MarkerViewManager {
}
}
public void animateVisible(@NonNull MarkerView marker, boolean visible) {
View convertView = mMarkerViewMap.get(marker);
if (convertView != null) {
convertView.setVisibility(visible ? View.VISIBLE : View.GONE);
}
}
public void update() {
View convertView;
for (MarkerView marker : mMarkerViewMap.keySet()) {
@@ -57,7 +64,7 @@ public class MarkerViewManager {
PointF point = mapboxMap.getProjection().toScreenLocation(marker.getPosition());
convertView.setX(point.x - (convertView.getMeasuredWidth() / 2));
convertView.setY(point.y - (convertView.getMeasuredHeight() / 2));
if (convertView.getVisibility() == View.GONE) {
if (marker.isVisible() && convertView.getVisibility() == View.GONE) {
convertView.animate().cancel();
convertView.setAlpha(0);
AnimatorUtils.alpha(convertView, 1);
@@ -181,6 +188,9 @@ public class MarkerViewManager {
// alpha
adaptedView.setAlpha(marker.getAlpha());
// visible
adaptedView.setVisibility(marker.isVisible() ? View.VISIBLE : View.GONE);
if (mapboxMap.getSelectedMarkers().contains(marker)) {
// if a marker to be shown was selected
// replay that animation with duration 0

View File

@@ -27,6 +27,7 @@ public class MarkerViewOptions extends BaseMarkerViewOptions<MarkerView, MarkerV
selectAnimatorResource(in.readInt());
deselectAnimatorResource(in.readInt());
rotation(in.readInt());
visible(in.readByte() != 0);
if (in.readByte() != 0) {
// this means we have an icon
String iconId = in.readString();
@@ -52,11 +53,12 @@ public class MarkerViewOptions extends BaseMarkerViewOptions<MarkerView, MarkerV
out.writeString(getSnippet());
out.writeString(getTitle());
out.writeByte((byte) (isFlat() ? 1 : 0));
out.writeParcelable(getCenterOffset(),flags);
out.writeParcelable(getInfoWindowOffset(),flags);
out.writeParcelable(getCenterOffset(), flags);
out.writeParcelable(getInfoWindowOffset(), flags);
out.writeInt(getSelectAnimRes());
out.writeInt(getDeselectAnimRes());
out.writeInt(getRotation());
out.writeByte((byte) (isVisible() ? 1 : 0));
Icon icon = getIcon();
out.writeByte((byte) (icon != null ? 1 : 0));
if (icon != null) {
@@ -77,6 +79,7 @@ public class MarkerViewOptions extends BaseMarkerViewOptions<MarkerView, MarkerV
marker.setSelectAnimRes(selectAnimRes);
marker.setDeselectAnimRes(deselectAnimRes);
marker.setRotation(rotation);
marker.setVisible(visible);
return marker;
}
@@ -95,11 +98,8 @@ public class MarkerViewOptions extends BaseMarkerViewOptions<MarkerView, MarkerV
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MarkerViewOptions that = (MarkerViewOptions) o;
return marker != null ? marker.equals(that.marker) : that.marker == null;
}
@Override