Converted a few of SDK files (one package) to Kotlin (#637)
Co-authored-by: Artak Kalantarian <artak@amazon.com> Co-authored-by: Birk Skyum <74932975+birkskyum@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
cf35b29b54
commit
ccd3c60e55
@@ -1,415 +0,0 @@
|
||||
package com.mapbox.mapboxsdk.camera;
|
||||
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import androidx.annotation.FloatRange;
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.Size;
|
||||
|
||||
import com.mapbox.mapboxsdk.R;
|
||||
import com.mapbox.mapboxsdk.constants.MapboxConstants;
|
||||
import com.mapbox.mapboxsdk.geometry.LatLng;
|
||||
import com.mapbox.mapboxsdk.utils.MathUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* Resembles the position, angle, zoom and tilt of the user's viewpoint.
|
||||
*/
|
||||
public final class CameraPosition implements Parcelable {
|
||||
|
||||
public static final CameraPosition DEFAULT = new CameraPosition(new LatLng(), 0, 0, 0, new double[] {0, 0, 0, 0});
|
||||
|
||||
public static final Parcelable.Creator<CameraPosition> CREATOR =
|
||||
new Parcelable.Creator<CameraPosition>() {
|
||||
public CameraPosition createFromParcel(Parcel in) {
|
||||
double bearing = in.readDouble();
|
||||
LatLng target = in.readParcelable(LatLng.class.getClassLoader());
|
||||
double tilt = in.readDouble();
|
||||
double zoom = in.readDouble();
|
||||
|
||||
double[] padding = null;
|
||||
int paddingSize = in.readInt();
|
||||
if (paddingSize > 0) {
|
||||
padding = new double[paddingSize];
|
||||
for (int i = 0; i < paddingSize; i++) {
|
||||
padding[i] = in.readDouble();
|
||||
}
|
||||
}
|
||||
|
||||
return new CameraPosition(target, zoom, tilt, bearing, padding);
|
||||
}
|
||||
|
||||
public CameraPosition[] newArray(int size) {
|
||||
return new CameraPosition[size];
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Direction that the camera is pointing in, in degrees clockwise from north.
|
||||
*/
|
||||
@Keep
|
||||
public final double bearing;
|
||||
|
||||
/**
|
||||
* The location that the camera is pointing at.
|
||||
*/
|
||||
@Keep
|
||||
public final LatLng target;
|
||||
|
||||
/**
|
||||
* The angle, in degrees, of the camera angle from the nadir (directly facing the Earth).
|
||||
* See {@link Builder#tilt(double)} for details of restrictions on the range of values.
|
||||
*/
|
||||
@Keep
|
||||
public final double tilt;
|
||||
|
||||
/**
|
||||
* Zoom level near the center of the screen. See {@link Builder#zoom(double)} for the definition of the camera's
|
||||
* zoom level.
|
||||
*/
|
||||
@Keep
|
||||
public final double zoom;
|
||||
|
||||
/**
|
||||
* Padding in pixels. Specified in left, top, right, bottom order.
|
||||
* See {@link Builder#padding(double[])} for the definition of the camera's padding.
|
||||
*/
|
||||
@Keep
|
||||
public final double[] padding;
|
||||
|
||||
/**
|
||||
* Constructs a CameraPosition.
|
||||
*
|
||||
* @param target The target location to align with the center of the screen.
|
||||
* @param zoom Zoom level at target. See zoom(float) for details of restrictions.
|
||||
* @param tilt The camera angle, in degrees, from the nadir (directly down). See tilt(float)
|
||||
* for details of restrictions.
|
||||
* @param bearing Direction that the camera is pointing in, in degrees clockwise from north.
|
||||
* This value will be normalized to be within 0 degrees inclusive and 360 degrees
|
||||
* exclusive.
|
||||
* @throws NullPointerException if target is null
|
||||
* @throws IllegalArgumentException if tilt is outside the range of 0 to 90 degrees inclusive.
|
||||
* @deprecated use {@link CameraPosition#CameraPosition(LatLng, double, double, double, double[])} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
CameraPosition(LatLng target, double zoom, double tilt, double bearing) {
|
||||
this(target, zoom, tilt, bearing, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a CameraPosition.
|
||||
*
|
||||
* @param target The target location to align with the center of the screen.
|
||||
* @param zoom Zoom level at target. See zoom(float) for details of restrictions.
|
||||
* @param tilt The camera angle, in degrees, from the nadir (directly down). See tilt(float)
|
||||
* for details of restrictions.
|
||||
* @param bearing Direction that the camera is pointing in, in degrees clockwise from north.
|
||||
* This value will be normalized to be within 0 degrees inclusive and 360 degrees
|
||||
* exclusive.
|
||||
* @param padding Padding in pixels. Specified in left, top, right, bottom order.
|
||||
* @throws NullPointerException if target is null
|
||||
* @throws IllegalArgumentException if tilt is outside the range of 0 to 90 degrees inclusive.
|
||||
*/
|
||||
@Keep
|
||||
CameraPosition(LatLng target, double zoom, double tilt, double bearing, double[] padding) {
|
||||
this.target = target;
|
||||
this.bearing = bearing;
|
||||
this.tilt = tilt;
|
||||
this.zoom = zoom;
|
||||
this.padding = padding;
|
||||
}
|
||||
|
||||
/**
|
||||
* Describe the kinds of special objects contained in this Parcelable's
|
||||
* marshalled representation.
|
||||
*
|
||||
* @return integer 0.
|
||||
*/
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flatten this object in to a Parcel.
|
||||
*
|
||||
* @param out The Parcel in which the object should be written.
|
||||
* @param flags Additional flags about how the object should be written. May be 0 or
|
||||
* {@link #PARCELABLE_WRITE_RETURN_VALUE}.
|
||||
*/
|
||||
@Override
|
||||
public void writeToParcel(Parcel out, int flags) {
|
||||
out.writeDouble(bearing);
|
||||
out.writeParcelable(target, flags);
|
||||
out.writeDouble(tilt);
|
||||
out.writeDouble(zoom);
|
||||
|
||||
if (padding != null) {
|
||||
int length = padding.length;
|
||||
out.writeInt(length);
|
||||
for (double v : padding) {
|
||||
out.writeDouble(v);
|
||||
}
|
||||
} else {
|
||||
out.writeInt(-1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a String with the camera target, zoom, bearing and tilt.
|
||||
*
|
||||
* @return A String with CameraPosition information.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Target: " + target + ", Zoom:" + zoom + ", Bearing:" + bearing + ", Tilt:" + tilt
|
||||
+ ", Padding:" + Arrays.toString(padding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares this {@link CameraPosition} object with another {@link CameraPosition} and
|
||||
* determines if their target, zoom, tilt, and bearing match.
|
||||
*
|
||||
* @param o Another {@link CameraPosition} to compare with this object.
|
||||
* @return True if target, zoom, tilt, and bearing match this {@link CameraPosition} object.
|
||||
* Else, false.
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
CameraPosition cameraPosition = (CameraPosition) o;
|
||||
if (target != null && !target.equals(cameraPosition.target)) {
|
||||
return false;
|
||||
} else if (zoom != cameraPosition.zoom) {
|
||||
return false;
|
||||
} else if (tilt != cameraPosition.tilt) {
|
||||
return false;
|
||||
} else if (bearing != cameraPosition.bearing) {
|
||||
return false;
|
||||
} else if (!Arrays.equals(padding, cameraPosition.padding)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gives an integer which can be used as the bucket number for storing elements of the set/map.
|
||||
* This bucket number is the address of the element inside the set/map. There's no guarantee
|
||||
* that this hash value will be consistent between different Java implementations, or even
|
||||
* between different execution runs of the same program.
|
||||
*
|
||||
* @return integer value you can use for storing element.
|
||||
*/
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result;
|
||||
long temp;
|
||||
temp = Double.doubleToLongBits(bearing);
|
||||
result = (int) (temp ^ (temp >>> 32));
|
||||
result = 31 * result + (target != null ? target.hashCode() : 0);
|
||||
temp = Double.doubleToLongBits(tilt);
|
||||
result = 31 * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits(zoom);
|
||||
result = 31 * result + (int) (temp ^ (temp >>> 32));
|
||||
result = 31 * result + Arrays.hashCode(padding);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builder for composing CameraPosition objects.
|
||||
*/
|
||||
public static final class Builder {
|
||||
|
||||
private double bearing = -1;
|
||||
@Nullable
|
||||
private LatLng target = null;
|
||||
private double tilt = -1;
|
||||
private double zoom = -1;
|
||||
private double[] padding = null;
|
||||
|
||||
/**
|
||||
* Create an empty builder.
|
||||
*/
|
||||
public Builder() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a builder with an existing CameraPosition data.
|
||||
*
|
||||
* @param previous Existing CameraPosition values to use
|
||||
*/
|
||||
public Builder(@Nullable CameraPosition previous) {
|
||||
super();
|
||||
if (previous != null) {
|
||||
this.bearing = previous.bearing;
|
||||
this.target = previous.target;
|
||||
this.tilt = previous.tilt;
|
||||
this.zoom = previous.zoom;
|
||||
this.padding = previous.padding;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a builder with an existing CameraPosition data.
|
||||
*
|
||||
* @param typedArray TypedArray containing attribute values
|
||||
*/
|
||||
public Builder(@Nullable TypedArray typedArray) {
|
||||
super();
|
||||
if (typedArray != null) {
|
||||
this.bearing = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraBearing, 0.0f);
|
||||
double lat = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTargetLat, 0.0f);
|
||||
double lng = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTargetLng, 0.0f);
|
||||
this.target = new LatLng(lat, lng);
|
||||
this.tilt = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTilt, 0.0f);
|
||||
this.zoom = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraZoom, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a builder from an existing CameraPositionUpdate update.
|
||||
*
|
||||
* @param update Update containing camera options
|
||||
*/
|
||||
public Builder(@Nullable CameraUpdateFactory.CameraPositionUpdate update) {
|
||||
super();
|
||||
if (update != null) {
|
||||
bearing = update.getBearing();
|
||||
target = update.getTarget();
|
||||
tilt = update.getTilt();
|
||||
zoom = update.getZoom();
|
||||
padding = update.getPadding();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create builder from an existing CameraPositionUpdate update.
|
||||
*
|
||||
* @param update Update containing camera options
|
||||
*/
|
||||
public Builder(@Nullable CameraUpdateFactory.ZoomUpdate update) {
|
||||
super();
|
||||
if (update != null) {
|
||||
this.zoom = update.getZoom();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the direction that the camera is pointing in, in degrees clockwise from north.
|
||||
*
|
||||
* @param bearing Bearing
|
||||
* @return this
|
||||
*/
|
||||
@NonNull
|
||||
public Builder bearing(double bearing) {
|
||||
double direction = bearing;
|
||||
|
||||
while (direction >= 360) {
|
||||
direction -= 360;
|
||||
}
|
||||
while (direction < 0) {
|
||||
direction += 360;
|
||||
}
|
||||
|
||||
this.bearing = direction;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the location where the camera is pointing at.
|
||||
*
|
||||
* @param location target of the camera
|
||||
* @return this
|
||||
*/
|
||||
@NonNull
|
||||
public Builder target(LatLng location) {
|
||||
this.target = location;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the tilt of the camera in degrees
|
||||
* <p>
|
||||
* value is clamped to {@link MapboxConstants#MINIMUM_TILT} and {@link MapboxConstants#MAXIMUM_TILT}.
|
||||
* </p>
|
||||
*
|
||||
* @param tilt Tilt value of the camera
|
||||
* @return this
|
||||
*/
|
||||
@NonNull
|
||||
public Builder tilt(@FloatRange(from = MapboxConstants.MINIMUM_TILT,
|
||||
to = MapboxConstants.MAXIMUM_TILT) double tilt) {
|
||||
this.tilt = MathUtils.clamp(tilt, MapboxConstants.MINIMUM_TILT, MapboxConstants.MAXIMUM_TILT);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the zoom of the camera
|
||||
* <p>
|
||||
* Zoom ranges from {@link MapboxConstants#MINIMUM_ZOOM} to {@link MapboxConstants#MAXIMUM_ZOOM}
|
||||
* </p>
|
||||
*
|
||||
* @param zoom Zoom value of the camera
|
||||
* @return this
|
||||
*/
|
||||
@NonNull
|
||||
public Builder zoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM,
|
||||
to = MapboxConstants.MAXIMUM_ZOOM) double zoom) {
|
||||
this.zoom = zoom;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Padding in pixels that shifts the viewport by the specified amount.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
* <p>
|
||||
* Specified in left, top, right, bottom order.
|
||||
* </p>
|
||||
*
|
||||
* @param padding Camera padding
|
||||
* @return this
|
||||
*/
|
||||
@NonNull
|
||||
public Builder padding(@Size(4) double[] padding) {
|
||||
this.padding = padding;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Padding in pixels that shifts the viewport by the specified amount.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
* <p>
|
||||
* Specified in left, top, right, bottom order.
|
||||
* </p>
|
||||
*
|
||||
* @return this
|
||||
*/
|
||||
@NonNull
|
||||
public Builder padding(double left, double top, double right, double bottom) {
|
||||
this.padding = new double[] {left, top, right, bottom};
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the CameraPosition.
|
||||
*
|
||||
* @return CameraPosition
|
||||
*/
|
||||
public CameraPosition build() {
|
||||
return new CameraPosition(target, zoom, tilt, bearing, padding);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,387 @@
|
||||
package com.mapbox.mapboxsdk.camera
|
||||
|
||||
import android.content.res.TypedArray
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import androidx.annotation.FloatRange
|
||||
import androidx.annotation.Keep
|
||||
import androidx.annotation.Size
|
||||
import com.mapbox.mapboxsdk.R
|
||||
import com.mapbox.mapboxsdk.camera.CameraPosition.Builder
|
||||
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory.CameraPositionUpdate
|
||||
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory.ZoomUpdate
|
||||
import com.mapbox.mapboxsdk.constants.MapboxConstants
|
||||
import com.mapbox.mapboxsdk.geometry.LatLng
|
||||
import com.mapbox.mapboxsdk.utils.MathUtils
|
||||
import java.util.Arrays
|
||||
|
||||
/**
|
||||
* Resembles the position, angle, zoom and tilt of the user's viewpoint.
|
||||
*/
|
||||
class CameraPosition
|
||||
/**
|
||||
* Constructs a CameraPosition.
|
||||
*
|
||||
* @param target The target location to align with the center of the screen.
|
||||
* @param zoom Zoom level at target. See zoom(float) for details of restrictions.
|
||||
* @param tilt The camera angle, in degrees, from the nadir (directly down). See tilt(float)
|
||||
* for details of restrictions.
|
||||
* @param bearing Direction that the camera is pointing in, in degrees clockwise from north.
|
||||
* This value will be normalized to be within 0 degrees inclusive and 360 degrees
|
||||
* exclusive.
|
||||
* @param padding Padding in pixels. Specified in left, top, right, bottom order.
|
||||
* @throws NullPointerException if target is null
|
||||
* @throws IllegalArgumentException if tilt is outside the range of 0 to 90 degrees inclusive.
|
||||
*/ @Keep internal constructor(
|
||||
|
||||
/**
|
||||
* The location that the camera is pointing at.
|
||||
*/
|
||||
@field:Keep
|
||||
@JvmField
|
||||
val target: LatLng?,
|
||||
|
||||
/**
|
||||
* Zoom level near the center of the screen. See [Builder.zoom] for the definition of the camera's
|
||||
* zoom level.
|
||||
*/
|
||||
@field:Keep
|
||||
@JvmField
|
||||
val zoom: Double,
|
||||
|
||||
/**
|
||||
* The angle, in degrees, of the camera angle from the nadir (directly facing the Earth).
|
||||
* See [Builder.tilt] for details of restrictions on the range of values.
|
||||
*/
|
||||
@field:Keep
|
||||
@JvmField
|
||||
val tilt: Double,
|
||||
|
||||
/**
|
||||
* Direction that the camera is pointing in, in degrees clockwise from north.
|
||||
*/
|
||||
@field:Keep
|
||||
@JvmField
|
||||
val bearing: Double,
|
||||
|
||||
/**
|
||||
* Padding in pixels. Specified in left, top, right, bottom order.
|
||||
* See [Builder.padding] for the definition of the camera's padding.
|
||||
*/
|
||||
@field:Keep
|
||||
@JvmField
|
||||
val padding: DoubleArray?
|
||||
|
||||
) : Parcelable {
|
||||
|
||||
/**
|
||||
* Constructs a CameraPosition.
|
||||
*
|
||||
* @param target The target location to align with the center of the screen.
|
||||
* @param zoom Zoom level at target. See zoom(float) for details of restrictions.
|
||||
* @param tilt The camera angle, in degrees, from the nadir (directly down). See tilt(float)
|
||||
* for details of restrictions.
|
||||
* @param bearing Direction that the camera is pointing in, in degrees clockwise from north.
|
||||
* This value will be normalized to be within 0 degrees inclusive and 360 degrees
|
||||
* exclusive.
|
||||
* @throws NullPointerException if target is null
|
||||
* @throws IllegalArgumentException if tilt is outside the range of 0 to 90 degrees inclusive.
|
||||
*/
|
||||
@Deprecated("use {@link CameraPosition#CameraPosition(LatLng, double, double, double, double[])} instead.")
|
||||
internal constructor(target: LatLng?, zoom: Double, tilt: Double, bearing: Double) : this(target, zoom, tilt, bearing, null) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Describe the kinds of special objects contained in this Parcelable's
|
||||
* marshalled representation.
|
||||
*
|
||||
* @return integer 0.
|
||||
*/
|
||||
override fun describeContents(): Int {
|
||||
return 0
|
||||
}
|
||||
|
||||
/**
|
||||
* Flatten this object in to a Parcel.
|
||||
*
|
||||
* @param out The Parcel in which the object should be written.
|
||||
* @param flags Additional flags about how the object should be written. May be 0 or
|
||||
* [.PARCELABLE_WRITE_RETURN_VALUE].
|
||||
*/
|
||||
override fun writeToParcel(out: Parcel, flags: Int) {
|
||||
out.writeDouble(bearing)
|
||||
out.writeParcelable(target, flags)
|
||||
out.writeDouble(tilt)
|
||||
out.writeDouble(zoom)
|
||||
if (padding != null) {
|
||||
val length = padding.size
|
||||
out.writeInt(length)
|
||||
for (v in padding) {
|
||||
out.writeDouble(v)
|
||||
}
|
||||
} else {
|
||||
out.writeInt(-1)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a String with the camera target, zoom, bearing and tilt.
|
||||
*
|
||||
* @return A String with CameraPosition information.
|
||||
*/
|
||||
override fun toString(): String {
|
||||
return ("Target: " + target + ", Zoom:" + zoom + ", Bearing:" + bearing + ", Tilt:" + tilt + ", Padding:" + Arrays.toString(padding))
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares this [CameraPosition] object with another [CameraPosition] and
|
||||
* determines if their target, zoom, tilt, and bearing match.
|
||||
*
|
||||
* @param other Another [CameraPosition] to compare with this object.
|
||||
* @return True if target, zoom, tilt, and bearing match this [CameraPosition] object.
|
||||
* Else, false.
|
||||
*/
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
if (other == null || javaClass != other.javaClass) {
|
||||
return false
|
||||
}
|
||||
val cameraPosition = other as CameraPosition
|
||||
if (target != null && target != cameraPosition.target) {
|
||||
return false
|
||||
} else if (zoom != cameraPosition.zoom) {
|
||||
return false
|
||||
} else if (tilt != cameraPosition.tilt) {
|
||||
return false
|
||||
} else if (bearing != cameraPosition.bearing) {
|
||||
return false
|
||||
} else if (!Arrays.equals(padding, cameraPosition.padding)) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* Gives an integer which can be used as the bucket number for storing elements of the set/map.
|
||||
* This bucket number is the address of the element inside the set/map. There's no guarantee
|
||||
* that this hash value will be consistent between different Java implementations, or even
|
||||
* between different execution runs of the same program.
|
||||
*
|
||||
* @return integer value you can use for storing element.
|
||||
*/
|
||||
override fun hashCode(): Int {
|
||||
var result: Int
|
||||
var temp: Long
|
||||
temp = java.lang.Double.doubleToLongBits(bearing)
|
||||
result = (temp xor (temp ushr 32)).toInt()
|
||||
result = 31 * result + (target?.hashCode() ?: 0)
|
||||
temp = java.lang.Double.doubleToLongBits(tilt)
|
||||
result = 31 * result + (temp xor (temp ushr 32)).toInt()
|
||||
temp = java.lang.Double.doubleToLongBits(zoom)
|
||||
result = 31 * result + (temp xor (temp ushr 32)).toInt()
|
||||
result = 31 * result + Arrays.hashCode(padding)
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* Builder for composing CameraPosition objects.
|
||||
*/
|
||||
class Builder {
|
||||
private var bearing = -1.0
|
||||
private var target: LatLng? = null
|
||||
private var tilt = -1.0
|
||||
private var zoom = -1.0
|
||||
private var padding: DoubleArray? = null
|
||||
|
||||
/**
|
||||
* Create an empty builder.
|
||||
*/
|
||||
constructor() : super() {}
|
||||
|
||||
/**
|
||||
* Create a builder with an existing CameraPosition data.
|
||||
*
|
||||
* @param previous Existing CameraPosition values to use
|
||||
*/
|
||||
constructor(previous: CameraPosition?) : super() {
|
||||
if (previous != null) {
|
||||
bearing = previous.bearing
|
||||
target = previous.target
|
||||
tilt = previous.tilt
|
||||
zoom = previous.zoom
|
||||
padding = previous.padding
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a builder with an existing CameraPosition data.
|
||||
*
|
||||
* @param typedArray TypedArray containing attribute values
|
||||
*/
|
||||
constructor(typedArray: TypedArray?) : super() {
|
||||
if (typedArray != null) {
|
||||
bearing = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraBearing, 0.0f).toDouble()
|
||||
val lat = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTargetLat, 0.0f).toDouble()
|
||||
val lng = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTargetLng, 0.0f).toDouble()
|
||||
target = LatLng(lat, lng)
|
||||
tilt = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTilt, 0.0f).toDouble()
|
||||
zoom = typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraZoom, 0.0f).toDouble()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a builder from an existing CameraPositionUpdate update.
|
||||
*
|
||||
* @param update Update containing camera options
|
||||
*/
|
||||
constructor(update: CameraPositionUpdate?) : super() {
|
||||
if (update != null) {
|
||||
bearing = update.bearing
|
||||
target = update.target
|
||||
tilt = update.tilt
|
||||
zoom = update.zoom
|
||||
padding = update.padding
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create builder from an existing CameraPositionUpdate update.
|
||||
*
|
||||
* @param update Update containing camera options
|
||||
*/
|
||||
constructor(update: ZoomUpdate?) : super() {
|
||||
if (update != null) {
|
||||
zoom = update.zoom
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the direction that the camera is pointing in, in degrees clockwise from north.
|
||||
*
|
||||
* @param bearing Bearing
|
||||
* @return this
|
||||
*/
|
||||
fun bearing(bearing: Double): Builder {
|
||||
var direction = bearing
|
||||
while (direction >= 360) {
|
||||
direction -= 360.0
|
||||
}
|
||||
while (direction < 0) {
|
||||
direction += 360.0
|
||||
}
|
||||
this.bearing = direction
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the location where the camera is pointing at.
|
||||
*
|
||||
* @param location target of the camera
|
||||
* @return this
|
||||
*/
|
||||
fun target(location: LatLng?): Builder {
|
||||
target = location
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the tilt of the camera in degrees
|
||||
*
|
||||
*
|
||||
* value is clamped to [MapboxConstants.MINIMUM_TILT] and [MapboxConstants.MAXIMUM_TILT].
|
||||
*
|
||||
*
|
||||
* @param tilt Tilt value of the camera
|
||||
* @return this
|
||||
*/
|
||||
fun tilt(@FloatRange(from = MapboxConstants.MINIMUM_TILT, to = MapboxConstants.MAXIMUM_TILT) tilt: Double): Builder {
|
||||
this.tilt = MathUtils.clamp(tilt, MapboxConstants.MINIMUM_TILT, MapboxConstants.MAXIMUM_TILT)
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the zoom of the camera
|
||||
*
|
||||
*
|
||||
* Zoom ranges from [MapboxConstants.MINIMUM_ZOOM] to [MapboxConstants.MAXIMUM_ZOOM]
|
||||
*
|
||||
*
|
||||
* @param zoom Zoom value of the camera
|
||||
* @return this
|
||||
*/
|
||||
fun zoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM.toDouble(), to = MapboxConstants.MAXIMUM_ZOOM.toDouble()) zoom: Double): Builder {
|
||||
this.zoom = zoom
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Padding in pixels that shifts the viewport by the specified amount.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
*
|
||||
*
|
||||
* Specified in left, top, right, bottom order.
|
||||
*
|
||||
*
|
||||
* @param padding Camera padding
|
||||
* @return this
|
||||
*/
|
||||
fun padding(@Size(4) padding: DoubleArray?): Builder {
|
||||
this.padding = padding
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Padding in pixels that shifts the viewport by the specified amount.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
*
|
||||
*
|
||||
* Specified in left, top, right, bottom order.
|
||||
*
|
||||
*
|
||||
* @return this
|
||||
*/
|
||||
fun padding(left: Double, top: Double, right: Double, bottom: Double): Builder {
|
||||
padding = doubleArrayOf(left, top, right, bottom)
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the CameraPosition.
|
||||
*
|
||||
* @return CameraPosition
|
||||
*/
|
||||
fun build(): CameraPosition {
|
||||
return CameraPosition(target, zoom, tilt, bearing, padding)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val DEFAULT = CameraPosition(LatLng(), 0.0, 0.0, 0.0, doubleArrayOf(0.0, 0.0, 0.0, 0.0))
|
||||
|
||||
@JvmField
|
||||
val CREATOR: Parcelable.Creator<CameraPosition> = object : Parcelable.Creator<CameraPosition> {
|
||||
override fun createFromParcel(`in`: Parcel): CameraPosition {
|
||||
val bearing = `in`.readDouble()
|
||||
val target = `in`.readParcelable<LatLng>(LatLng::class.java.classLoader)
|
||||
val tilt = `in`.readDouble()
|
||||
val zoom = `in`.readDouble()
|
||||
var padding: DoubleArray? = null
|
||||
val paddingSize = `in`.readInt()
|
||||
if (paddingSize > 0) {
|
||||
padding = DoubleArray(paddingSize)
|
||||
for (i in 0 until paddingSize) {
|
||||
padding[i] = `in`.readDouble()
|
||||
}
|
||||
}
|
||||
return CameraPosition(target, zoom, tilt, bearing, padding)
|
||||
}
|
||||
|
||||
override fun newArray(size: Int): Array<CameraPosition?> {
|
||||
return arrayOfNulls(size)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package com.mapbox.mapboxsdk.camera;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
||||
|
||||
/**
|
||||
* Interface definition for camera updates.
|
||||
*/
|
||||
public interface CameraUpdate {
|
||||
|
||||
/**
|
||||
* Get the camera position from the camera update.
|
||||
*
|
||||
* @param mapboxMap Map object to build the position from
|
||||
* @return the camera position from the implementing camera update
|
||||
*/
|
||||
@Nullable
|
||||
CameraPosition getCameraPosition(@NonNull MapboxMap mapboxMap);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.mapbox.mapboxsdk.camera
|
||||
|
||||
import com.mapbox.mapboxsdk.maps.MapboxMap
|
||||
|
||||
/**
|
||||
* Interface definition for camera updates.
|
||||
*/
|
||||
interface CameraUpdate {
|
||||
/**
|
||||
* Get the camera position from the camera update.
|
||||
*
|
||||
* @param mapboxMap Map object to build the position from
|
||||
* @return the camera position from the implementing camera update
|
||||
*/
|
||||
fun getCameraPosition(mapboxMap: MapboxMap): CameraPosition?
|
||||
}
|
||||
@@ -1,638 +0,0 @@
|
||||
package com.mapbox.mapboxsdk.camera;
|
||||
|
||||
import android.graphics.Point;
|
||||
import android.graphics.PointF;
|
||||
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.mapbox.mapboxsdk.geometry.LatLng;
|
||||
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
|
||||
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
||||
import com.mapbox.mapboxsdk.maps.Projection;
|
||||
import com.mapbox.mapboxsdk.maps.UiSettings;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* Factory for creating CameraUpdate objects.
|
||||
*/
|
||||
public final class CameraUpdateFactory {
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the camera to a specified CameraPosition.
|
||||
*
|
||||
* @param cameraPosition Camera Position to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate newCameraPosition(@NonNull CameraPosition cameraPosition) {
|
||||
return new CameraPositionUpdate(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt,
|
||||
cameraPosition.zoom, cameraPosition.padding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the center of the screen to a latitude and longitude
|
||||
* specified by a LatLng object. This centers the camera on the LatLng object.
|
||||
*
|
||||
* @param latLng Target location to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate newLatLng(@NonNull LatLng latLng) {
|
||||
return new CameraPositionUpdate(-1, latLng, -1, -1, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that transforms the camera such that the specified
|
||||
* latitude/longitude bounds are centered on screen at the greatest possible zoom level while maintaining
|
||||
* current camera position bearing and tilt values.
|
||||
* <p>
|
||||
* You can specify padding, in order to inset the bounding box from the map view's edges.
|
||||
* The padding will not persist and impact following camera transformations.
|
||||
* </p>
|
||||
*
|
||||
* @param bounds Bounds to match Camera position with
|
||||
* @param padding Padding added to the bounds
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate newLatLngBounds(@NonNull LatLngBounds bounds, int padding) {
|
||||
return newLatLngBounds(bounds, padding, padding, padding, padding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that transforms the camera such that the specified
|
||||
* latitude/longitude bounds are centered on screen at the greatest possible zoom level while using
|
||||
* provided bearing and tilt values.
|
||||
* <p>
|
||||
* You can specify padding, in order to inset the bounding box from the map view's edges.
|
||||
* The padding will not persist and impact following camera transformations.
|
||||
* </p>
|
||||
*
|
||||
* @param bounds Bounds to match Camera position with
|
||||
* @param bearing Bearing to take in account when generating the bounds
|
||||
* @param tilt Tilt to take in account when generating the bounds
|
||||
* @param padding Padding added to the bounds
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate newLatLngBounds(@NonNull LatLngBounds bounds, double bearing, double tilt, int padding) {
|
||||
return newLatLngBounds(bounds, bearing, tilt, padding, padding, padding, padding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that transforms the camera such that the specified
|
||||
* latitude/longitude bounds are centered on screen at the greatest possible zoom level while maintaining
|
||||
* current camera position bearing and tilt values.
|
||||
* <p>
|
||||
* You can specify padding, in order to inset the bounding box from the map view's edges.
|
||||
* The padding will not persist and impact following camera transformations.
|
||||
* </p>
|
||||
*
|
||||
* @param bounds Bounds to base the Camera position out of
|
||||
* @param paddingLeft Padding left of the bounds
|
||||
* @param paddingTop Padding top of the bounds
|
||||
* @param paddingRight Padding right of the bounds
|
||||
* @param paddingBottom Padding bottom of the bounds
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate newLatLngBounds(@NonNull LatLngBounds bounds, int paddingLeft, int paddingTop,
|
||||
int paddingRight, int paddingBottom) {
|
||||
return new CameraBoundsUpdate(bounds, null, null, paddingLeft, paddingTop, paddingRight, paddingBottom);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that transforms the camera such that the specified
|
||||
* latitude/longitude bounds are centered on screen at the greatest possible zoom level while using
|
||||
* provided bearing and tilt values.
|
||||
* <p>
|
||||
* You can specify padding, in order to inset the bounding box from the map view's edges.
|
||||
* The padding will not persist and impact following camera transformations.
|
||||
* </p>
|
||||
*
|
||||
* @param bounds Bounds to base the Camera position out of
|
||||
* @param bearing Bearing to take in account when generating the bounds
|
||||
* @param tilt Tilt to take in account when generating the bounds
|
||||
* @param paddingLeft Padding left of the bounds
|
||||
* @param paddingTop Padding top of the bounds
|
||||
* @param paddingRight Padding right of the bounds
|
||||
* @param paddingBottom Padding bottom of the bounds
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate newLatLngBounds(@NonNull LatLngBounds bounds, double bearing, double tilt,
|
||||
int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) {
|
||||
return new CameraBoundsUpdate(bounds, bearing, tilt, paddingLeft, paddingTop, paddingRight, paddingBottom);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the center of the screen to a latitude and longitude
|
||||
* specified by a LatLng object taking the specified padding into account.
|
||||
*
|
||||
* @param latLng Target location to change to
|
||||
* @param zoom Zoom level to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate newLatLngZoom(@NonNull LatLng latLng, double zoom) {
|
||||
return new CameraPositionUpdate(-1, latLng, -1, zoom, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the center of the screen to a latitude and longitude
|
||||
* specified by a LatLng object, and moves to the given zoom level.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
*
|
||||
* @param latLng Target location to change to
|
||||
* @param left Left padding
|
||||
* @param top Top padding
|
||||
* @param right Right padding
|
||||
* @param bottom Bottom padding
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate newLatLngPadding(@NonNull LatLng latLng,
|
||||
double left, double top, double right, double bottom) {
|
||||
return new CameraPositionUpdate(-1, latLng, -1, -1, new double[] {left, top, right, bottom});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that shifts the zoom level of the current camera viewpoint.
|
||||
*
|
||||
* @param amount Amount of zoom level to change with
|
||||
* @param focus Focus point of zoom
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate zoomBy(double amount, Point focus) {
|
||||
return new ZoomUpdate(amount, focus.x, focus.y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that shifts the zoom level of the current camera viewpoint.
|
||||
*
|
||||
* @param amount Amount of zoom level to change with
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate zoomBy(double amount) {
|
||||
return new ZoomUpdate(ZoomUpdate.ZOOM_BY, amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that zooms in on the map by moving the viewpoint's height closer to
|
||||
* the Earth's surface. The zoom increment is 1.0.
|
||||
*
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate zoomIn() {
|
||||
return new ZoomUpdate(ZoomUpdate.ZOOM_IN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that zooms out on the map by moving the viewpoint's height farther
|
||||
* away from the Earth's surface. The zoom increment is -1.0.
|
||||
*
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate zoomOut() {
|
||||
return new ZoomUpdate(ZoomUpdate.ZOOM_OUT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the camera viewpoint to a particular zoom level.
|
||||
*
|
||||
* @param zoom Zoom level to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate zoomTo(double zoom) {
|
||||
return new ZoomUpdate(ZoomUpdate.ZOOM_TO, zoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the camera viewpoint to a particular bearing.
|
||||
*
|
||||
* @param bearing Bearing to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate bearingTo(double bearing) {
|
||||
return new CameraPositionUpdate(bearing, null, -1, -1, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the camera viewpoint to a particular tilt.
|
||||
*
|
||||
* @param tilt Tilt to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate tiltTo(double tilt) {
|
||||
return new CameraPositionUpdate(-1, null, tilt, -1, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that when animated changes the camera padding.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
* <p>
|
||||
* Specified in left, top, right, bottom order.
|
||||
* </p>
|
||||
*
|
||||
* @param padding Padding to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate paddingTo(double[] padding) {
|
||||
return new CameraPositionUpdate(-1, null, -1, -1, padding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that when animated changes the camera padding.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
* <p>
|
||||
* Specified in left, top, right, bottom order.
|
||||
* </p>
|
||||
*
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
public static CameraUpdate paddingTo(double left, double top, double right, double bottom) {
|
||||
return paddingTo(new double[] {left, top, right, bottom});
|
||||
}
|
||||
|
||||
//
|
||||
// CameraUpdate types
|
||||
//
|
||||
|
||||
static final class CameraPositionUpdate implements CameraUpdate {
|
||||
|
||||
private final double bearing;
|
||||
private final LatLng target;
|
||||
private final double tilt;
|
||||
private final double zoom;
|
||||
private final double[] padding;
|
||||
|
||||
CameraPositionUpdate(double bearing, LatLng target, double tilt, double zoom, double[] padding) {
|
||||
this.bearing = bearing;
|
||||
this.target = target;
|
||||
this.tilt = tilt;
|
||||
this.zoom = zoom;
|
||||
this.padding = padding;
|
||||
}
|
||||
|
||||
public LatLng getTarget() {
|
||||
return target;
|
||||
}
|
||||
|
||||
public double getBearing() {
|
||||
return bearing;
|
||||
}
|
||||
|
||||
public double getTilt() {
|
||||
return tilt;
|
||||
}
|
||||
|
||||
public double getZoom() {
|
||||
return zoom;
|
||||
}
|
||||
|
||||
public double[] getPadding() {
|
||||
return padding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CameraPosition getCameraPosition(@NonNull MapboxMap mapboxMap) {
|
||||
if (target == null) {
|
||||
CameraPosition previousPosition = mapboxMap.getCameraPosition();
|
||||
return new CameraPosition.Builder(this)
|
||||
.target(previousPosition.target)
|
||||
.build();
|
||||
}
|
||||
return new CameraPosition.Builder(this).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
CameraPositionUpdate that = (CameraPositionUpdate) o;
|
||||
|
||||
if (Double.compare(that.bearing, bearing) != 0) {
|
||||
return false;
|
||||
}
|
||||
if (Double.compare(that.tilt, tilt) != 0) {
|
||||
return false;
|
||||
}
|
||||
if (Double.compare(that.zoom, zoom) != 0) {
|
||||
return false;
|
||||
}
|
||||
if (target != null ? !target.equals(that.target) : that.target != null) {
|
||||
return false;
|
||||
}
|
||||
return Arrays.equals(padding, that.padding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result;
|
||||
long temp;
|
||||
temp = Double.doubleToLongBits(bearing);
|
||||
result = (int) (temp ^ (temp >>> 32));
|
||||
result = 31 * result + (target != null ? target.hashCode() : 0);
|
||||
temp = Double.doubleToLongBits(tilt);
|
||||
result = 31 * result + (int) (temp ^ (temp >>> 32));
|
||||
temp = Double.doubleToLongBits(zoom);
|
||||
result = 31 * result + (int) (temp ^ (temp >>> 32));
|
||||
result = 31 * result + Arrays.hashCode(padding);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CameraPositionUpdate{"
|
||||
+ "bearing=" + bearing
|
||||
+ ", target=" + target
|
||||
+ ", tilt=" + tilt
|
||||
+ ", zoom=" + zoom
|
||||
+ ", padding=" + Arrays.toString(padding)
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
|
||||
static final class CameraBoundsUpdate implements CameraUpdate {
|
||||
|
||||
private final LatLngBounds bounds;
|
||||
private final int[] padding;
|
||||
private final Double bearing;
|
||||
private final Double tilt;
|
||||
|
||||
CameraBoundsUpdate(LatLngBounds bounds, Double bearing, Double tilt, int[] padding) {
|
||||
this.bounds = bounds;
|
||||
this.padding = padding;
|
||||
this.bearing = bearing;
|
||||
this.tilt = tilt;
|
||||
}
|
||||
|
||||
CameraBoundsUpdate(LatLngBounds bounds, Double bearing, Double tilt, int paddingLeft,
|
||||
int paddingTop, int paddingRight, int paddingBottom) {
|
||||
this(bounds, bearing, tilt, new int[] {paddingLeft, paddingTop, paddingRight, paddingBottom});
|
||||
}
|
||||
|
||||
public LatLngBounds getBounds() {
|
||||
return bounds;
|
||||
}
|
||||
|
||||
public int[] getPadding() {
|
||||
return padding;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CameraPosition getCameraPosition(@NonNull MapboxMap mapboxMap) {
|
||||
if (bearing == null && tilt == null) {
|
||||
// use current camera position tilt and bearing
|
||||
return mapboxMap.getCameraForLatLngBounds(bounds, padding);
|
||||
} else {
|
||||
// use provided tilt and bearing
|
||||
assert bearing != null;
|
||||
assert tilt != null;
|
||||
return mapboxMap.getCameraForLatLngBounds(bounds, padding, bearing, tilt);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
CameraBoundsUpdate that = (CameraBoundsUpdate) o;
|
||||
|
||||
if (!bounds.equals(that.bounds)) {
|
||||
return false;
|
||||
}
|
||||
return Arrays.equals(padding, that.padding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = bounds.hashCode();
|
||||
result = 31 * result + Arrays.hashCode(padding);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CameraBoundsUpdate{"
|
||||
+ "bounds=" + bounds
|
||||
+ ", padding=" + Arrays.toString(padding)
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
|
||||
static final class CameraMoveUpdate implements CameraUpdate {
|
||||
|
||||
private float x;
|
||||
private float y;
|
||||
|
||||
CameraMoveUpdate(float x, float y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CameraPosition getCameraPosition(@NonNull MapboxMap mapboxMap) {
|
||||
UiSettings uiSettings = mapboxMap.getUiSettings();
|
||||
Projection projection = mapboxMap.getProjection();
|
||||
// Calculate the new center point
|
||||
float viewPortWidth = uiSettings.getWidth();
|
||||
float viewPortHeight = uiSettings.getHeight();
|
||||
int[] padding = mapboxMap.getPadding();
|
||||
|
||||
// we inverse the map padding, is reapplied when using moveTo/easeTo or animateTo
|
||||
PointF targetPoint = new PointF(
|
||||
(viewPortWidth - padding[0] + padding[1]) / 2 + x,
|
||||
(viewPortHeight + padding[1] - padding[3]) / 2 + y
|
||||
);
|
||||
|
||||
LatLng latLng = projection.fromScreenLocation(targetPoint);
|
||||
CameraPosition previousPosition = mapboxMap.getCameraPosition();
|
||||
CameraPosition position =
|
||||
new CameraPosition.Builder()
|
||||
.target(latLng)
|
||||
.zoom(previousPosition.zoom)
|
||||
.tilt(previousPosition.tilt)
|
||||
.bearing(previousPosition.bearing)
|
||||
.build();
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
CameraMoveUpdate that = (CameraMoveUpdate) o;
|
||||
|
||||
if (Float.compare(that.x, x) != 0) {
|
||||
return false;
|
||||
}
|
||||
return Float.compare(that.y, y) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = (x != +0.0f ? Float.floatToIntBits(x) : 0);
|
||||
result = 31 * result + (y != +0.0f ? Float.floatToIntBits(y) : 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CameraMoveUpdate{"
|
||||
+ "x=" + x
|
||||
+ ", y=" + y
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
|
||||
static final class ZoomUpdate implements CameraUpdate {
|
||||
|
||||
@IntDef( {ZOOM_IN, ZOOM_OUT, ZOOM_BY, ZOOM_TO, ZOOM_TO_POINT})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@interface Type {
|
||||
}
|
||||
|
||||
static final int ZOOM_IN = 0;
|
||||
static final int ZOOM_OUT = 1;
|
||||
static final int ZOOM_BY = 2;
|
||||
static final int ZOOM_TO = 3;
|
||||
static final int ZOOM_TO_POINT = 4;
|
||||
|
||||
@Type
|
||||
private final int type;
|
||||
private final double zoom;
|
||||
private float x;
|
||||
private float y;
|
||||
|
||||
ZoomUpdate(@Type int type) {
|
||||
this.type = type;
|
||||
this.zoom = 0;
|
||||
}
|
||||
|
||||
ZoomUpdate(@Type int type, double zoom) {
|
||||
this.type = type;
|
||||
this.zoom = zoom;
|
||||
}
|
||||
|
||||
ZoomUpdate(double zoom, float x, float y) {
|
||||
this.type = ZOOM_TO_POINT;
|
||||
this.zoom = zoom;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public double getZoom() {
|
||||
return zoom;
|
||||
}
|
||||
|
||||
@Type
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public float getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public float getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
double transformZoom(double currentZoom) {
|
||||
switch (getType()) {
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_IN:
|
||||
currentZoom++;
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_OUT:
|
||||
currentZoom--;
|
||||
if (currentZoom < 0) {
|
||||
currentZoom = 0;
|
||||
}
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_TO:
|
||||
currentZoom = getZoom();
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_BY:
|
||||
currentZoom = currentZoom + getZoom();
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_TO_POINT:
|
||||
currentZoom = currentZoom + getZoom();
|
||||
break;
|
||||
}
|
||||
return currentZoom;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CameraPosition getCameraPosition(@NonNull MapboxMap mapboxMap) {
|
||||
CameraPosition cameraPosition = mapboxMap.getCameraPosition();
|
||||
if (getType() != CameraUpdateFactory.ZoomUpdate.ZOOM_TO_POINT) {
|
||||
return new CameraPosition.Builder(cameraPosition)
|
||||
.zoom(transformZoom(cameraPosition.zoom))
|
||||
.build();
|
||||
} else {
|
||||
return new CameraPosition.Builder(cameraPosition)
|
||||
.zoom(transformZoom(cameraPosition.zoom))
|
||||
.target(mapboxMap.getProjection().fromScreenLocation(new PointF(getX(), getY())))
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ZoomUpdate that = (ZoomUpdate) o;
|
||||
|
||||
if (type != that.type) {
|
||||
return false;
|
||||
}
|
||||
if (Double.compare(that.zoom, zoom) != 0) {
|
||||
return false;
|
||||
}
|
||||
if (Float.compare(that.x, x) != 0) {
|
||||
return false;
|
||||
}
|
||||
return Float.compare(that.y, y) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result;
|
||||
long temp;
|
||||
result = type;
|
||||
temp = Double.doubleToLongBits(zoom);
|
||||
result = 31 * result + (int) (temp ^ (temp >>> 32));
|
||||
result = 31 * result + (x != +0.0f ? Float.floatToIntBits(x) : 0);
|
||||
result = 31 * result + (y != +0.0f ? Float.floatToIntBits(y) : 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ZoomUpdate{"
|
||||
+ "type=" + type
|
||||
+ ", zoom=" + zoom
|
||||
+ ", x=" + x
|
||||
+ ", y=" + y
|
||||
+ '}';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,510 @@
|
||||
package com.mapbox.mapboxsdk.camera
|
||||
|
||||
import android.graphics.Point
|
||||
import android.graphics.PointF
|
||||
import androidx.annotation.IntDef
|
||||
import com.mapbox.mapboxsdk.geometry.LatLng
|
||||
import com.mapbox.mapboxsdk.geometry.LatLngBounds
|
||||
import com.mapbox.mapboxsdk.maps.MapboxMap
|
||||
import timber.log.Timber
|
||||
import java.lang.Double.min
|
||||
import java.util.Arrays
|
||||
|
||||
/**
|
||||
* Factory for creating CameraUpdate objects.
|
||||
*/
|
||||
object CameraUpdateFactory {
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the camera to a specified CameraPosition.
|
||||
*
|
||||
* @param cameraPosition Camera Position to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun newCameraPosition(cameraPosition: CameraPosition): CameraUpdate {
|
||||
return CameraPositionUpdate(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom, cameraPosition.padding)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the center of the screen to a latitude and longitude
|
||||
* specified by a LatLng object. This centers the camera on the LatLng object.
|
||||
*
|
||||
* @param latLng Target location to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun newLatLng(latLng: LatLng): CameraUpdate {
|
||||
return CameraPositionUpdate(-1.0, latLng, -1.0, -1.0, null)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that transforms the camera such that the specified
|
||||
* latitude/longitude bounds are centered on screen at the greatest possible zoom level while maintaining
|
||||
* current camera position bearing and tilt values.
|
||||
*
|
||||
*
|
||||
* You can specify padding, in order to inset the bounding box from the map view's edges.
|
||||
* The padding will not persist and impact following camera transformations.
|
||||
*
|
||||
*
|
||||
* @param bounds Bounds to match Camera position with
|
||||
* @param padding Padding added to the bounds
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun newLatLngBounds(bounds: LatLngBounds, padding: Int): CameraUpdate {
|
||||
return newLatLngBounds(bounds, padding, padding, padding, padding)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that transforms the camera such that the specified
|
||||
* latitude/longitude bounds are centered on screen at the greatest possible zoom level while using
|
||||
* provided bearing and tilt values.
|
||||
*
|
||||
*
|
||||
* You can specify padding, in order to inset the bounding box from the map view's edges.
|
||||
* The padding will not persist and impact following camera transformations.
|
||||
*
|
||||
*
|
||||
* @param bounds Bounds to match Camera position with
|
||||
* @param bearing Bearing to take in account when generating the bounds
|
||||
* @param tilt Tilt to take in account when generating the bounds
|
||||
* @param padding Padding added to the bounds
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun newLatLngBounds(bounds: LatLngBounds, bearing: Double, tilt: Double, padding: Int): CameraUpdate {
|
||||
return newLatLngBounds(bounds, bearing, tilt, padding, padding, padding, padding)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that transforms the camera such that the specified
|
||||
* latitude/longitude bounds are centered on screen at the greatest possible zoom level while maintaining
|
||||
* current camera position bearing and tilt values.
|
||||
*
|
||||
*
|
||||
* You can specify padding, in order to inset the bounding box from the map view's edges.
|
||||
* The padding will not persist and impact following camera transformations.
|
||||
*
|
||||
*
|
||||
* @param bounds Bounds to base the Camera position out of
|
||||
* @param paddingLeft Padding left of the bounds
|
||||
* @param paddingTop Padding top of the bounds
|
||||
* @param paddingRight Padding right of the bounds
|
||||
* @param paddingBottom Padding bottom of the bounds
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun newLatLngBounds(bounds: LatLngBounds, paddingLeft: Int, paddingTop: Int, paddingRight: Int, paddingBottom: Int): CameraUpdate {
|
||||
return CameraBoundsUpdate(bounds, null, null, paddingLeft, paddingTop, paddingRight, paddingBottom)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that transforms the camera such that the specified
|
||||
* latitude/longitude bounds are centered on screen at the greatest possible zoom level while using
|
||||
* provided bearing and tilt values.
|
||||
*
|
||||
*
|
||||
* You can specify padding, in order to inset the bounding box from the map view's edges.
|
||||
* The padding will not persist and impact following camera transformations.
|
||||
*
|
||||
*
|
||||
* @param bounds Bounds to base the Camera position out of
|
||||
* @param bearing Bearing to take in account when generating the bounds
|
||||
* @param tilt Tilt to take in account when generating the bounds
|
||||
* @param paddingLeft Padding left of the bounds
|
||||
* @param paddingTop Padding top of the bounds
|
||||
* @param paddingRight Padding right of the bounds
|
||||
* @param paddingBottom Padding bottom of the bounds
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun newLatLngBounds(bounds: LatLngBounds, bearing: Double, tilt: Double, paddingLeft: Int, paddingTop: Int, paddingRight: Int, paddingBottom: Int): CameraUpdate {
|
||||
return CameraBoundsUpdate(bounds, bearing, tilt, paddingLeft, paddingTop, paddingRight, paddingBottom)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the center of the screen to a latitude and longitude
|
||||
* specified by a LatLng object taking the specified padding into account.
|
||||
*
|
||||
* @param latLng Target location to change to
|
||||
* @param zoom Zoom level to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun newLatLngZoom(latLng: LatLng, zoom: Double): CameraUpdate {
|
||||
return CameraPositionUpdate(-1.0, latLng, -1.0, zoom, null)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the center of the screen to a latitude and longitude
|
||||
* specified by a LatLng object, and moves to the given zoom level.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
*
|
||||
* @param latLng Target location to change to
|
||||
* @param left Left padding
|
||||
* @param top Top padding
|
||||
* @param right Right padding
|
||||
* @param bottom Bottom padding
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun newLatLngPadding(latLng: LatLng, left: Double, top: Double, right: Double, bottom: Double): CameraUpdate {
|
||||
return CameraPositionUpdate(-1.0, latLng, -1.0, -1.0, doubleArrayOf(left, top, right, bottom))
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that shifts the zoom level of the current camera viewpoint.
|
||||
*
|
||||
* @param amount Amount of zoom level to change with
|
||||
* @param focus Focus point of zoom
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun zoomBy(amount: Double, focus: Point): CameraUpdate {
|
||||
return ZoomUpdate(amount, focus.x.toFloat(), focus.y.toFloat())
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that shifts the zoom level of the current camera viewpoint.
|
||||
*
|
||||
* @param amount Amount of zoom level to change with
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun zoomBy(amount: Double): CameraUpdate {
|
||||
return ZoomUpdate(ZoomUpdate.ZOOM_BY, amount)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that zooms in on the map by moving the viewpoint's height closer to
|
||||
* the Earth's surface. The zoom increment is 1.0.
|
||||
*
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun zoomIn(): CameraUpdate {
|
||||
return ZoomUpdate(ZoomUpdate.ZOOM_IN)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that zooms out on the map by moving the viewpoint's height farther
|
||||
* away from the Earth's surface. The zoom increment is -1.0.
|
||||
*
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun zoomOut(): CameraUpdate {
|
||||
return ZoomUpdate(ZoomUpdate.ZOOM_OUT)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the camera viewpoint to a particular zoom level.
|
||||
*
|
||||
* @param zoom Zoom level to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun zoomTo(zoom: Double): CameraUpdate {
|
||||
return ZoomUpdate(ZoomUpdate.ZOOM_TO, zoom)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the camera viewpoint to a particular bearing.
|
||||
*
|
||||
* @param bearing Bearing to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun bearingTo(bearing: Double): CameraUpdate {
|
||||
return CameraPositionUpdate(bearing, null, -1.0, -1.0, null)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that moves the camera viewpoint to a particular tilt.
|
||||
*
|
||||
* @param tilt Tilt to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun tiltTo(tilt: Double): CameraUpdate {
|
||||
return CameraPositionUpdate(-1.0, null, tilt, -1.0, null)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that when animated changes the camera padding.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
*
|
||||
*
|
||||
* Specified in left, top, right, bottom order.
|
||||
*
|
||||
*
|
||||
* @param padding Padding to change to
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun paddingTo(padding: DoubleArray?): CameraUpdate {
|
||||
return CameraPositionUpdate(-1.0, null, -1.0, -1.0, padding)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a CameraUpdate that when animated changes the camera padding.
|
||||
* Applied padding is going to persist and impact following camera transformations.
|
||||
*
|
||||
*
|
||||
* Specified in left, top, right, bottom order.
|
||||
*
|
||||
*
|
||||
* @return CameraUpdate Final Camera Position
|
||||
*/
|
||||
@JvmStatic
|
||||
fun paddingTo(left: Double, top: Double, right: Double, bottom: Double): CameraUpdate {
|
||||
return paddingTo(doubleArrayOf(left, top, right, bottom))
|
||||
}
|
||||
|
||||
//
|
||||
// CameraUpdate types
|
||||
//
|
||||
class CameraPositionUpdate(val bearing: Double, val target: LatLng?, val tilt: Double, val zoom: Double, val padding: DoubleArray?) : CameraUpdate {
|
||||
|
||||
override fun getCameraPosition(mapboxMap: MapboxMap): CameraPosition {
|
||||
if (target == null) {
|
||||
val previousPosition = mapboxMap.cameraPosition
|
||||
return CameraPosition.Builder(this).target(previousPosition.target).build()
|
||||
}
|
||||
return CameraPosition.Builder(this).build()
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
if (other == null || javaClass != other.javaClass) {
|
||||
return false
|
||||
}
|
||||
val that = other as CameraPositionUpdate
|
||||
if (java.lang.Double.compare(that.bearing, bearing) != 0) {
|
||||
return false
|
||||
}
|
||||
if (java.lang.Double.compare(that.tilt, tilt) != 0) {
|
||||
return false
|
||||
}
|
||||
if (java.lang.Double.compare(that.zoom, zoom) != 0) {
|
||||
return false
|
||||
}
|
||||
return if (if (target != null) target != that.target else that.target != null) {
|
||||
false
|
||||
} else {
|
||||
Arrays.equals(padding, that.padding)
|
||||
}
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result: Int
|
||||
var temp: Long
|
||||
temp = java.lang.Double.doubleToLongBits(bearing)
|
||||
result = (temp xor (temp ushr 32)).toInt()
|
||||
result = 31 * result + (target?.hashCode() ?: 0)
|
||||
temp = java.lang.Double.doubleToLongBits(tilt)
|
||||
result = 31 * result + (temp xor (temp ushr 32)).toInt()
|
||||
temp = java.lang.Double.doubleToLongBits(zoom)
|
||||
result = 31 * result + (temp xor (temp ushr 32)).toInt()
|
||||
result = 31 * result + Arrays.hashCode(padding)
|
||||
return result
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return ("CameraPositionUpdate{" + "bearing=" + bearing + ", target=" + target + ", tilt=" + tilt + ", zoom=" + zoom + ", padding=" + Arrays.toString(padding) + '}')
|
||||
}
|
||||
}
|
||||
|
||||
internal class CameraBoundsUpdate(val bounds: LatLngBounds, private val bearing: Double?, private val tilt: Double?, val padding: IntArray) : CameraUpdate {
|
||||
constructor(bounds: LatLngBounds, bearing: Double?, tilt: Double?, paddingLeft: Int, paddingTop: Int, paddingRight: Int, paddingBottom: Int) : this(
|
||||
bounds,
|
||||
bearing,
|
||||
tilt,
|
||||
intArrayOf(paddingLeft, paddingTop, paddingRight, paddingBottom)
|
||||
) {
|
||||
}
|
||||
|
||||
override fun getCameraPosition(mapboxMap: MapboxMap): CameraPosition? {
|
||||
return if (bearing == null && tilt == null) {
|
||||
// use current camera position tilt and bearing
|
||||
mapboxMap.getCameraForLatLngBounds(bounds, padding)
|
||||
} else {
|
||||
// use provided tilt and bearing
|
||||
assert(bearing != null)
|
||||
assert(tilt != null)
|
||||
mapboxMap.getCameraForLatLngBounds(bounds, padding, bearing!!, tilt!!)
|
||||
}
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
if (other == null || javaClass != other.javaClass) {
|
||||
return false
|
||||
}
|
||||
val that = other as CameraBoundsUpdate
|
||||
return if (bounds != that.bounds) {
|
||||
false
|
||||
} else {
|
||||
padding.contentEquals(that.padding)
|
||||
}
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = bounds.hashCode()
|
||||
result = 31 * result + Arrays.hashCode(padding)
|
||||
return result
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return ("CameraBoundsUpdate{" + "bounds=" + bounds + ", padding=" + Arrays.toString(padding) + '}')
|
||||
}
|
||||
}
|
||||
|
||||
internal class CameraMoveUpdate(private val x: Float, private val y: Float) : CameraUpdate {
|
||||
override fun getCameraPosition(mapboxMap: MapboxMap): CameraPosition {
|
||||
val uiSettings = mapboxMap.uiSettings
|
||||
val projection = mapboxMap.projection
|
||||
// Calculate the new center point
|
||||
val viewPortWidth = uiSettings.width
|
||||
val viewPortHeight = uiSettings.height
|
||||
val padding = mapboxMap.padding
|
||||
|
||||
// we inverse the map padding, is reapplied when using moveTo/easeTo or animateTo
|
||||
val targetPoint = PointF((viewPortWidth - padding[0] + padding[1]) / 2 + x, (viewPortHeight + padding[1] - padding[3]) / 2 + y)
|
||||
val latLng = projection.fromScreenLocation(targetPoint)
|
||||
val previousPosition = mapboxMap.cameraPosition
|
||||
return CameraPosition.Builder().target(latLng).zoom(previousPosition.zoom).tilt(previousPosition.tilt).bearing(previousPosition.bearing).build()
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
if (other == null || javaClass != other.javaClass) {
|
||||
return false
|
||||
}
|
||||
val that = other as CameraMoveUpdate
|
||||
return if (java.lang.Float.compare(that.x, x) != 0) {
|
||||
false
|
||||
} else {
|
||||
that.y.compareTo(y) == 0
|
||||
}
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = if (x != +0.0f) java.lang.Float.floatToIntBits(x) else 0
|
||||
result = 31 * result + if (y != +0.0f) java.lang.Float.floatToIntBits(y) else 0
|
||||
return result
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return ("CameraMoveUpdate{" + "x=" + x + ", y=" + y + '}')
|
||||
}
|
||||
}
|
||||
|
||||
class ZoomUpdate : CameraUpdate {
|
||||
@IntDef(ZOOM_IN, ZOOM_OUT, ZOOM_BY, ZOOM_TO, ZOOM_TO_POINT)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
internal annotation class Type
|
||||
|
||||
@get:Type
|
||||
@Type
|
||||
val type: Int
|
||||
val zoom: Double
|
||||
var x = 0f
|
||||
private set
|
||||
var y = 0f
|
||||
private set
|
||||
|
||||
constructor(@Type type: Int) {
|
||||
this.type = type
|
||||
zoom = 0.0
|
||||
}
|
||||
|
||||
constructor(@Type type: Int, zoom: Double) {
|
||||
this.type = type
|
||||
this.zoom = zoom
|
||||
}
|
||||
|
||||
constructor(zoom: Double, x: Float, y: Float) {
|
||||
type = ZOOM_TO_POINT
|
||||
this.zoom = zoom
|
||||
this.x = x
|
||||
this.y = y
|
||||
}
|
||||
|
||||
private fun transformZoom(currentZoomArg: Double): Double {
|
||||
return when (type) {
|
||||
ZOOM_IN -> currentZoomArg + 1
|
||||
ZOOM_OUT -> {
|
||||
min(currentZoomArg - 1, 0.0)
|
||||
}
|
||||
|
||||
ZOOM_TO -> zoom
|
||||
ZOOM_BY, ZOOM_TO_POINT -> currentZoomArg + zoom
|
||||
else -> {
|
||||
Timber.e("Unprocessed when branch")
|
||||
4.0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getCameraPosition(mapboxMap: MapboxMap): CameraPosition {
|
||||
val cameraPosition = mapboxMap.cameraPosition
|
||||
return if (type != ZOOM_TO_POINT) {
|
||||
CameraPosition.Builder(cameraPosition).zoom(transformZoom(cameraPosition.zoom)).build()
|
||||
} else {
|
||||
CameraPosition.Builder(cameraPosition).zoom(transformZoom(cameraPosition.zoom)).target(mapboxMap.projection.fromScreenLocation(PointF(x, y))).build()
|
||||
}
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
if (other == null || javaClass != other.javaClass) {
|
||||
return false
|
||||
}
|
||||
val that = other as ZoomUpdate
|
||||
if (type != that.type) {
|
||||
return false
|
||||
}
|
||||
if (java.lang.Double.compare(that.zoom, zoom) != 0) {
|
||||
return false
|
||||
}
|
||||
return if (java.lang.Float.compare(that.x, x) != 0) {
|
||||
false
|
||||
} else {
|
||||
that.y.compareTo(y) == 0
|
||||
}
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result: Int
|
||||
val temp: Long
|
||||
result = type
|
||||
temp = java.lang.Double.doubleToLongBits(zoom)
|
||||
result = 31 * result + (temp xor (temp ushr 32)).toInt()
|
||||
result = 31 * result + if (x != +0.0f) java.lang.Float.floatToIntBits(x) else 0
|
||||
result = 31 * result + if (y != +0.0f) java.lang.Float.floatToIntBits(y) else 0
|
||||
return result
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return ("ZoomUpdate{" + "type=" + type + ", zoom=" + zoom + ", x=" + x + ", y=" + y + '}')
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val ZOOM_IN = 0
|
||||
const val ZOOM_OUT = 1
|
||||
const val ZOOM_BY = 2
|
||||
const val ZOOM_TO = 3
|
||||
const val ZOOM_TO_POINT = 4
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
/**
|
||||
* Contains the Mapbox Maps Android Camera API classes.
|
||||
*/
|
||||
package com.mapbox.mapboxsdk.camera;
|
||||
package com.mapbox.mapboxsdk.camera
|
||||
@@ -8,10 +8,10 @@ import android.location.LocationListener;
|
||||
import android.location.LocationManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import timber.log.Timber;
|
||||
|
||||
import static com.mapbox.mapboxsdk.location.engine.Utils.isBetterLocation;
|
||||
|
||||
@@ -20,7 +20,7 @@ import static com.mapbox.mapboxsdk.location.engine.Utils.isBetterLocation;
|
||||
* <p>
|
||||
* Note: fusion will not work in background mode.
|
||||
*/
|
||||
class MapboxFusedLocationEngineImpl extends AndroidLocationEngineImpl {
|
||||
public class MapboxFusedLocationEngineImpl extends AndroidLocationEngineImpl {
|
||||
private static final String TAG = "MapboxLocationEngine";
|
||||
|
||||
MapboxFusedLocationEngineImpl(@NonNull Context context) {
|
||||
@@ -121,17 +121,17 @@ class MapboxFusedLocationEngineImpl extends AndroidLocationEngineImpl {
|
||||
|
||||
@Override
|
||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||
Log.d(TAG, "onStatusChanged: " + provider);
|
||||
Timber.d( "onStatusChanged: " + provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderEnabled(String provider) {
|
||||
Log.d(TAG, "onProviderEnabled: " + provider);
|
||||
Timber.d( "onProviderEnabled: " + provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderDisabled(String provider) {
|
||||
Log.d(TAG, "onProviderDisabled: " + provider);
|
||||
Timber.d("onProviderDisabled: " + provider);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user