[android] #3753 - Optimising zoom
[android] #3753 - removed old zoom methods from MapView
This commit is contained in:
@@ -93,7 +93,7 @@ public class CameraUpdateFactory {
|
||||
* @return
|
||||
*/
|
||||
public static CameraUpdate zoomBy(float amount, Point focus) {
|
||||
return new ZoomUpdate(ZoomUpdate.ZOOM_TO_POINT, focus.x, focus.y);
|
||||
return new ZoomUpdate(amount, focus.x, focus.y);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -611,7 +611,7 @@ public class MapView extends FrameLayout {
|
||||
void setDirection(@FloatRange(from = MapboxConstants.MINIMUM_DIRECTION, to = MapboxConstants.MAXIMUM_DIRECTION) double direction, boolean animated) {
|
||||
long duration = animated ? MapboxConstants.ANIMATION_DURATION : 0;
|
||||
mNativeMapView.cancelTransitions();
|
||||
// Out of range direactions are normallised in setBearing
|
||||
// Out of range directions are normalised in setBearing
|
||||
mNativeMapView.setBearing(-direction, duration);
|
||||
}
|
||||
|
||||
@@ -639,105 +639,6 @@ public class MapView extends FrameLayout {
|
||||
return mNativeMapView.getZoom();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Zooms the map to a new zoom level immediately without changing the center coordinate.
|
||||
* </p>
|
||||
* <p>
|
||||
* At zoom level 0, tiles cover the entire world map;
|
||||
* at zoom level 1, tiles cover 1/14 of the world;
|
||||
* at zoom level 2, tiles cover 1/16 of the world, and so on.
|
||||
* </p>
|
||||
* <p>
|
||||
* The initial zoom level is 0. The maximum zoom level is {@link MapboxConstants#MAXIMUM_ZOOM}.
|
||||
* </p>
|
||||
* If you want to animate the change, use {@link MapView#setZoom(double, boolean)}.
|
||||
*
|
||||
* @param zoomLevel The new zoom.
|
||||
* @see MapView#setZoom(double, boolean)
|
||||
* @see MapboxConstants#MAXIMUM_ZOOM
|
||||
*/
|
||||
@UiThread
|
||||
void setZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double zoomLevel) {
|
||||
setZoom(zoomLevel, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Zooms the map to a new zoom level and optionally animates the change without changing the center coordinate.
|
||||
* </p>
|
||||
* <p>
|
||||
* At zoom level 0, tiles cover the entire world map;
|
||||
* at zoom level 1, tiles cover 1/14 of the world;
|
||||
* at zoom level 2, tiles cover 1/16 of the world, and so on.
|
||||
* </p>
|
||||
* The initial zoom level is 0. The maximum zoom level is {@link MapboxConstants#MAXIMUM_ZOOM}.
|
||||
*
|
||||
* @param zoomLevel The new zoom level.
|
||||
* @param animated If true, animates the change. If false, immediately changes the map.
|
||||
* @see MapboxConstants#MAXIMUM_ZOOM
|
||||
*/
|
||||
@UiThread
|
||||
void setZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double zoomLevel, boolean animated) {
|
||||
long duration = animated ? MapboxConstants.ANIMATION_DURATION : 0;
|
||||
setZoom(zoomLevel, duration);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Zooms the map to a new zoom level and optionally animates the change without changing the center coordinate.
|
||||
* </p>
|
||||
* <p>
|
||||
* At zoom level 0, tiles cover the entire world map;
|
||||
* at zoom level 1, tiles cover 1/14 of the world;
|
||||
* at zoom level 2, tiles cover 1/16 of the world, and so on.
|
||||
* </p>
|
||||
* The initial zoom level is 0. The maximum zoom level is {@link MapboxConstants#MAXIMUM_ZOOM}.
|
||||
*
|
||||
* @param zoomLevel The new zoom level.
|
||||
* @param duration The length of the animation.
|
||||
* @see MapboxConstants#MAXIMUM_ZOOM
|
||||
*/
|
||||
@UiThread
|
||||
void setZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double zoomLevel, long duration) {
|
||||
if ((zoomLevel < MapboxConstants.MINIMUM_ZOOM) || (zoomLevel > MapboxConstants.MAXIMUM_ZOOM)) {
|
||||
Log.w(TAG, "Not setting zoom, value is in a unsupported range: " + zoomLevel);
|
||||
return;
|
||||
}
|
||||
mNativeMapView.cancelTransitions();
|
||||
mNativeMapView.setZoom(zoomLevel, duration);
|
||||
}
|
||||
|
||||
void setZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double zoomLevel, float x, float y) {
|
||||
if ((zoomLevel < MapboxConstants.MINIMUM_ZOOM) || (zoomLevel > MapboxConstants.MAXIMUM_ZOOM)) {
|
||||
Log.w(TAG, "Not setting zoom, value is in a unsupported range: " + zoomLevel);
|
||||
return;
|
||||
}
|
||||
LatLng target = fromScreenLocation(new PointF(x, y));
|
||||
flyTo(-1, target, MapboxConstants.ANIMATION_DURATION, -1, zoomLevel, null);
|
||||
}
|
||||
|
||||
void setZoom(CameraUpdateFactory.ZoomUpdate update, long duration) {
|
||||
switch (update.getType()) {
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_IN:
|
||||
setZoom(getZoom() + 1, duration);
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_OUT:
|
||||
setZoom(getZoom() - 1, duration);
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_TO:
|
||||
setZoom(update.getZoom(), duration);
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_BY:
|
||||
setZoom(getZoom() + update.getZoom(), duration);
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_TO_POINT:
|
||||
setZoom(update.getZoom(), update.getX(), update.getY());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * Return The current content padding left of the map view viewport.
|
||||
// *
|
||||
|
||||
@@ -115,14 +115,52 @@ public class MapboxMap {
|
||||
*/
|
||||
@UiThread
|
||||
public final void moveCamera(CameraUpdate update) {
|
||||
CameraPosition cameraPosition;
|
||||
if (update instanceof CameraUpdateFactory.PositionCameraUpdate) {
|
||||
CameraUpdateFactory.PositionCameraUpdate positionCameraUpdate = (CameraUpdateFactory.PositionCameraUpdate) update;
|
||||
CameraPosition cameraPosition = new CameraPosition.Builder(positionCameraUpdate).build();
|
||||
updateCameraPosition(cameraPosition);
|
||||
mMapView.jumpTo(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom);
|
||||
}else if (update instanceof CameraUpdateFactory.ZoomUpdate) {
|
||||
mMapView.setZoom((CameraUpdateFactory.ZoomUpdate) update, 0);
|
||||
cameraPosition = new CameraPosition.Builder(positionCameraUpdate).build();
|
||||
} else if (update instanceof CameraUpdateFactory.ZoomUpdate) {
|
||||
CameraUpdateFactory.ZoomUpdate zoomUpdate = (CameraUpdateFactory.ZoomUpdate) update;
|
||||
if(zoomUpdate.getType()!= CameraUpdateFactory.ZoomUpdate.ZOOM_TO_POINT){
|
||||
cameraPosition = new CameraPosition.Builder(mCurrentCameraPosition)
|
||||
.zoom(getZoom(zoomUpdate, mCurrentCameraPosition.zoom))
|
||||
.build();
|
||||
}else{
|
||||
cameraPosition = new CameraPosition.Builder(mCurrentCameraPosition)
|
||||
.zoom(getZoom(zoomUpdate, mCurrentCameraPosition.zoom))
|
||||
.target(fromScreenLocation(new PointF(zoomUpdate.getX(),zoomUpdate.getY())))
|
||||
.build();
|
||||
}
|
||||
} else {
|
||||
Log.e(MapboxConstants.TAG, "Unsupported CameraUpdate");
|
||||
return;
|
||||
}
|
||||
mCurrentCameraPosition = cameraPosition;
|
||||
mMapView.jumpTo(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom);
|
||||
}
|
||||
|
||||
private float getZoom(CameraUpdateFactory.ZoomUpdate update, float currentZoom) {
|
||||
switch (update.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 = update.getZoom();
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_BY:
|
||||
currentZoom = currentZoom + update.getZoom();
|
||||
break;
|
||||
case CameraUpdateFactory.ZoomUpdate.ZOOM_TO_POINT:
|
||||
currentZoom = currentZoom + update.getZoom();
|
||||
break;
|
||||
}
|
||||
return currentZoom;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -147,14 +185,28 @@ public class MapboxMap {
|
||||
*/
|
||||
@UiThread
|
||||
public final void easeCamera(CameraUpdate update, int durationMs, final MapboxMap.CancelableCallback callback) {
|
||||
CameraPosition cameraPosition;
|
||||
if (update instanceof CameraUpdateFactory.PositionCameraUpdate) {
|
||||
CameraUpdateFactory.PositionCameraUpdate positionCameraUpdate = (CameraUpdateFactory.PositionCameraUpdate) update;
|
||||
CameraPosition cameraPosition = new CameraPosition.Builder(positionCameraUpdate).build();
|
||||
updateCameraPosition(cameraPosition);
|
||||
mMapView.easeTo(cameraPosition.bearing, cameraPosition.target, getDurationNano(durationMs), cameraPosition.tilt, cameraPosition.zoom, callback);
|
||||
}else if (update instanceof CameraUpdateFactory.ZoomUpdate) {
|
||||
mMapView.setZoom((CameraUpdateFactory.ZoomUpdate) update, durationMs);
|
||||
cameraPosition = new CameraPosition.Builder(positionCameraUpdate).build();
|
||||
} else if (update instanceof CameraUpdateFactory.ZoomUpdate) {
|
||||
CameraUpdateFactory.ZoomUpdate zoomUpdate = (CameraUpdateFactory.ZoomUpdate) update;
|
||||
if(zoomUpdate.getType()!= CameraUpdateFactory.ZoomUpdate.ZOOM_TO_POINT){
|
||||
cameraPosition = new CameraPosition.Builder(mCurrentCameraPosition)
|
||||
.zoom(getZoom(zoomUpdate, mCurrentCameraPosition.zoom))
|
||||
.build();
|
||||
}else{
|
||||
cameraPosition = new CameraPosition.Builder(mCurrentCameraPosition)
|
||||
.zoom(getZoom(zoomUpdate, mCurrentCameraPosition.zoom))
|
||||
.target(fromScreenLocation(new PointF(zoomUpdate.getX(),zoomUpdate.getY())))
|
||||
.build();
|
||||
}
|
||||
} else {
|
||||
Log.e(MapboxConstants.TAG, "Unsupported CameraUpdate");
|
||||
return;
|
||||
}
|
||||
mCurrentCameraPosition = cameraPosition;
|
||||
mMapView.easeTo(cameraPosition.bearing, cameraPosition.target, getDurationNano(durationMs), cameraPosition.tilt, cameraPosition.zoom, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -205,19 +257,28 @@ public class MapboxMap {
|
||||
*/
|
||||
@UiThread
|
||||
public final void animateCamera(CameraUpdate update, int durationMs, final MapboxMap.CancelableCallback callback) {
|
||||
CameraPosition cameraPosition;
|
||||
if (update instanceof CameraUpdateFactory.PositionCameraUpdate) {
|
||||
CameraUpdateFactory.PositionCameraUpdate positionCameraUpdate = (CameraUpdateFactory.PositionCameraUpdate) update;
|
||||
CameraPosition cameraPosition = new CameraPosition.Builder(positionCameraUpdate).build();
|
||||
updateCameraPosition(cameraPosition);
|
||||
mMapView.flyTo(cameraPosition.bearing, cameraPosition.target, getDurationNano(durationMs), cameraPosition.tilt, cameraPosition.zoom, callback);
|
||||
cameraPosition = new CameraPosition.Builder(positionCameraUpdate).build();
|
||||
} else if (update instanceof CameraUpdateFactory.ZoomUpdate) {
|
||||
mMapView.setZoom((CameraUpdateFactory.ZoomUpdate) update, durationMs);
|
||||
CameraUpdateFactory.ZoomUpdate zoomUpdate = (CameraUpdateFactory.ZoomUpdate) update;
|
||||
if(zoomUpdate.getType()!= CameraUpdateFactory.ZoomUpdate.ZOOM_TO_POINT){
|
||||
cameraPosition = new CameraPosition.Builder(mCurrentCameraPosition)
|
||||
.zoom(getZoom(zoomUpdate, mCurrentCameraPosition.zoom))
|
||||
.build();
|
||||
}else {
|
||||
cameraPosition = new CameraPosition.Builder(mCurrentCameraPosition)
|
||||
.zoom(getZoom(zoomUpdate, mCurrentCameraPosition.zoom))
|
||||
.target(fromScreenLocation(new PointF(zoomUpdate.getX(), zoomUpdate.getY())))
|
||||
.build();
|
||||
}
|
||||
} else {
|
||||
Log.e(MapboxConstants.TAG, "Unsupported CameraUpdate");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// internal setter for CameraPosition
|
||||
void updateCameraPosition(@NonNull CameraPosition cameraPosition) {
|
||||
mCurrentCameraPosition = cameraPosition;
|
||||
mMapView.flyTo(cameraPosition.bearing, cameraPosition.target, getDurationNano(durationMs), cameraPosition.tilt, cameraPosition.zoom, callback);
|
||||
}
|
||||
|
||||
// internal time layer conversion
|
||||
|
||||
Reference in New Issue
Block a user