com.mapbox.mapboxsdk.maps.UiSettings Maven / Gradle / Ivy
package com.mapbox.mapboxsdk.maps;
import android.support.annotation.FloatRange;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
/**
* Settings for the user interface of a MapboxMap. To obtain this interface, call getUiSettings().
*/
public class UiSettings {
private MapView mapView;
private ViewSettings compassSettings;
private ViewSettings logoSettings;
private ViewSettings attributionSettings;
private boolean rotateGesturesEnabled;
private boolean tiltGesturesEnabled;
private boolean zoomGesturesEnabled;
private boolean zoomControlsEnabled;
private boolean scrollGesturesEnabled;
UiSettings(@NonNull MapView mapView) {
this.mapView = mapView;
this.compassSettings = new ViewSettings();
this.logoSettings = new ViewSettings();
this.attributionSettings = new ViewSettings();
}
/**
*
* Enables or disables the compass. The compass is an icon on the map that indicates the
* direction of north on the map. When a user clicks
* the compass, the camera orients itself to its default orientation and fades away shortly
* after. If disabled, the compass will never be displayed.
*
* By default, the compass is enabled.
*
* @param compassEnabled True to enable the compass; false to disable the compass.
*/
public void setCompassEnabled(boolean compassEnabled) {
compassSettings.setEnabled(compassEnabled);
mapView.setCompassEnabled(compassEnabled);
}
/**
* Returns whether the compass is enabled.
*
* @return True if the compass is enabled; false if the compass is disabled.
*/
public boolean isCompassEnabled() {
return compassSettings.isEnabled();
}
/**
*
* Sets the gravity of the compass view. Use this to change the corner of the map view that the
* compass is displayed in.
*
* By default, the compass is in the top right corner.
*
* @param gravity One of the values from {@link Gravity}.
* @see Gravity
*/
@UiThread
public void setCompassGravity(int gravity) {
compassSettings.setGravity(gravity);
mapView.setCompassGravity(gravity);
}
/**
* Returns the gravity value of the CompassView
*
* @return The gravity
*/
public int getCompassGravity() {
return compassSettings.getGravity();
}
/**
* Sets the margins of the compass view. Use this to change the distance of the compass from the
* map view edge.
*
* @param left The left margin in pixels.
* @param top The top margin in pixels.
* @param right The right margin in pixels.
* @param bottom The bottom margin in pixels.
*/
@UiThread
public void setCompassMargins(int left, int top, int right, int bottom) {
compassSettings.setMargins(new int[]{left, top, right, bottom});
mapView.setCompassMargins(left, top, right, bottom);
}
/**
* Returns the left side margin of CompassView
*
* @return The left margin in pixels
*/
public int getCompassMarginLeft() {
return compassSettings.getMargins()[0];
}
/**
* Returns the top side margin of CompassView
*
* @return The top margin in pixels
*/
public int getCompassMarginTop() {
return compassSettings.getMargins()[1];
}
/**
* Returns the right side margin of CompassView
*
* @return The right margin in pixels
*/
public int getCompassMarginRight() {
return compassSettings.getMargins()[2];
}
/**
* Returns the bottom side margin of CompassView
*
* @return The bottom margin in pixels
*/
public int getCompassMarginBottom() {
return compassSettings.getMargins()[3];
}
/**
*
* Enables or disables the Mapbox logo.
*
* By default, the compass is enabled.
*
* @param enabled True to enable the logo; false to disable the logo.
*/
public void setLogoEnabled(boolean enabled) {
logoSettings.setEnabled(enabled);
mapView.setLogoEnabled(enabled);
}
/**
* Returns whether the logo is enabled.
*
* @return True if the logo is enabled; false if the logo is disabled.
*/
public boolean isLogoEnabled() {
return logoSettings.isEnabled();
}
/**
*
* Sets the gravity of the logo view. Use this to change the corner of the map view that the
* Mapbox logo is displayed in.
*
* By default, the logo is in the bottom left corner.
*
* @param gravity One of the values from {@link Gravity}.
* @see Gravity
*/
public void setLogoGravity(int gravity) {
logoSettings.setGravity(gravity);
mapView.setLogoGravity(gravity);
}
/**
* Returns the gravity value of the logo
*
* @return The gravity
*/
public int getLogoGravity() {
return logoSettings.getGravity();
}
/**
* Sets the margins of the logo view. Use this to change the distance of the Mapbox logo from the
* map view edge.
*
* @param left The left margin in pixels.
* @param top The top margin in pixels.
* @param right The right margin in pixels.
* @param bottom The bottom margin in pixels.
*/
public void setLogoMargins(int left, int top, int right, int bottom) {
logoSettings.setMargins(new int[]{left, top, right, bottom});
mapView.setLogoMargins(left, top, right, bottom);
}
/**
* Returns the left side margin of the logo
*
* @return The left margin in pixels
*/
public int getLogoMarginLeft() {
return logoSettings.getMargins()[0];
}
/**
* Returns the top side margin of the logo
*
* @return The top margin in pixels
*/
public int getLogoMarginTop() {
return logoSettings.getMargins()[1];
}
/**
* Returns the right side margin of the logo
*
* @return The right margin in pixels
*/
public int getLogoMarginRight() {
return logoSettings.getMargins()[2];
}
/**
* Returns the bottom side margin of the logo
*
* @return The bottom margin in pixels
*/
public int getLogoMarginBottom() {
return logoSettings.getMargins()[3];
}
/**
*
* Enables or disables the Mapbox logo.
*
* By default, the compass is enabled.
*
* @param enabled True to enable the logo; false to disable the logo.
*/
public void setAttributionEnabled(boolean enabled) {
attributionSettings.setEnabled(enabled);
mapView.setAttributionEnabled(enabled ? View.VISIBLE : View.GONE);
}
/**
* Returns whether the logo is enabled.
*
* @return True if the logo is enabled; false if the logo is disabled.
*/
public boolean isAttributionEnabled() {
return attributionSettings.isEnabled();
}
/**
*
* Sets the gravity of the logo view. Use this to change the corner of the map view that the
* Mapbox logo is displayed in.
*
* By default, the logo is in the bottom left corner.
*
* @param gravity One of the values from {@link Gravity}.
* @see Gravity
*/
public void setAttributionGravity(int gravity) {
attributionSettings.setGravity(gravity);
mapView.setAttributionGravity(gravity);
}
/**
* Returns the gravity value of the logo
*
* @return The gravity
*/
public int getAttributionGravity() {
return attributionSettings.getGravity();
}
/**
* Sets the margins of the logo view. Use this to change the distance of the Mapbox logo from the
* map view edge.
*
* @param left The left margin in pixels.
* @param top The top margin in pixels.
* @param right The right margin in pixels.
* @param bottom The bottom margin in pixels.
*/
public void setAttributionMargins(int left, int top, int right, int bottom) {
attributionSettings.setMargins(new int[]{left, top, right, bottom});
mapView.setAttributionMargins(left, top, right, bottom);
}
/**
* Returns the left side margin of the logo
*
* @return The left margin in pixels
*/
public int getAttributionMarginLeft() {
return attributionSettings.getMargins()[0];
}
/**
* Returns the top side margin of the logo
*
* @return The top margin in pixels
*/
public int getAttributionMarginTop() {
return attributionSettings.getMargins()[1];
}
/**
* Returns the right side margin of the logo
*
* @return The right margin in pixels
*/
public int getAttributionMarginRight() {
return attributionSettings.getMargins()[2];
}
/**
* Returns the bottom side margin of the logo
*
* @return The bottom margin in pixels
*/
public int getAttributionMarginBottom() {
return attributionSettings.getMargins()[3];
}
/**
*
* Changes whether the user may rotate the map.
*
*
* This setting controls only user interactions with the map. If you set the value to false,
* you may still change the map location programmatically.
*
* The default value is true.
*
* @param rotateGesturesEnabled If true, rotating is enabled.
*/
public void setRotateGesturesEnabled(boolean rotateGesturesEnabled) {
this.rotateGesturesEnabled = rotateGesturesEnabled;
}
/**
* Returns whether the user may rotate the map.
*
* @return If true, rotating is enabled.
*/
public boolean isRotateGesturesEnabled() {
return rotateGesturesEnabled;
}
/**
*
* Changes whether the user may tilt the map.
*
*
* This setting controls only user interactions with the map. If you set the value to false,
* you may still change the map location programmatically.
*
* The default value is true.
*
* @param tiltGesturesEnabled If true, tilting is enabled.
*/
public void setTiltGesturesEnabled(boolean tiltGesturesEnabled) {
this.tiltGesturesEnabled = tiltGesturesEnabled;
}
/**
* Returns whether the user may tilt the map.
*
* @return If true, tilting is enabled.
*/
public boolean isTiltGesturesEnabled() {
return tiltGesturesEnabled;
}
/**
*
* Changes whether the user may zoom the map.
*
*
* This setting controls only user interactions with the map. If you set the value to false,
* you may still change the map location programmatically.
*
* The default value is true.
*
* @param zoomGesturesEnabled If true, zooming is enabled.
*/
public void setZoomGesturesEnabled(boolean zoomGesturesEnabled) {
this.zoomGesturesEnabled = zoomGesturesEnabled;
}
/**
* Returns whether the user may zoom the map.
*
* @return If true, zooming is enabled.
*/
public boolean isZoomGesturesEnabled() {
return zoomGesturesEnabled;
}
/**
*
* Sets whether the zoom controls are enabled.
* If enabled, the zoom controls are a pair of buttons
* (one for zooming in, one for zooming out) that appear on the screen.
* When pressed, they cause the camera to zoom in (or out) by one zoom level.
* If disabled, the zoom controls are not shown.
*
* By default the zoom controls are enabled if the device is only single touch capable;
*
* @param zoomControlsEnabled If true, the zoom controls are enabled.
*/
public void setZoomControlsEnabled(boolean zoomControlsEnabled) {
this.zoomControlsEnabled = zoomControlsEnabled;
}
/**
* Gets whether the zoom controls are enabled.
*
* @return If true, the zoom controls are enabled.
*/
public boolean isZoomControlsEnabled() {
return zoomControlsEnabled;
}
/**
*
* Changes whether the user may scroll around the map.
*
*
* This setting controls only user interactions with the map. If you set the value to false,
* you may still change the map location programmatically.
*
* The default value is true.
*
* @param scrollGesturesEnabled If true, scrolling is enabled.
*/
public void setScrollGesturesEnabled(boolean scrollGesturesEnabled) {
this.scrollGesturesEnabled = scrollGesturesEnabled;
}
/**
* Returns whether the user may scroll around the map.
*
* @return If true, scrolling is enabled.
*/
public boolean isScrollGesturesEnabled() {
return scrollGesturesEnabled;
}
/**
*
* Sets the preference for whether all gestures should be enabled or disabled.
*
*
* This setting controls only user interactions with the map. If you set the value to false,
* you may still change the map location programmatically.
*
* The default value is true.
*
* @param enabled If true, all gestures are available; otherwise, all gestures are disabled.
* @see #setZoomGesturesEnabled(boolean) )
* @see #setScrollGesturesEnabled(boolean)
* @see #setRotateGesturesEnabled(boolean)
* @see #setTiltGesturesEnabled(boolean)
*/
public void setAllGesturesEnabled(boolean enabled) {
setScrollGesturesEnabled(enabled);
setRotateGesturesEnabled(enabled);
setTiltGesturesEnabled(enabled);
setZoomGesturesEnabled(enabled);
}
/**
* Returns the measured height of the MapView
*
* @return height in pixels
*/
public float getHeight() {
return mapView.getMeasuredHeight();
}
/**
* Returns the measured width of the MapView
*
* @return widht in pixels
*/
public float getWidth() {
return mapView.getMeasuredWidth();
}
/**
* Invalidates the ViewSettings instances shown on top of the MapView
*/
public void invalidate() {
mapView.setLogoMargins(getLogoMarginLeft(), getLogoMarginTop(), getLogoMarginRight(), getLogoMarginBottom());
mapView.setCompassMargins(getCompassMarginLeft(), getCompassMarginTop(), getCompassMarginRight(), getCompassMarginBottom());
mapView.setAttributionMargins(getAttributionMarginLeft(), getAttributionMarginTop(), getAttributionMarginRight(), getAttributionMarginBottom());
}
}