[android] - expose moveBy, replace CameraUpdateFactory hook to moveBy for scrolling api

This commit is contained in:
tobrun
2018-10-29 15:43:46 +01:00
committed by Tobrun
parent 68fd3a2822
commit 1c733568b0
5 changed files with 118 additions and 22 deletions

View File

@@ -20,3 +20,4 @@ public interface CameraUpdate {
CameraPosition getCameraPosition(@NonNull MapboxMap mapboxMap);
}

View File

@@ -93,7 +93,9 @@ public final class CameraUpdateFactory {
* @param xPixel Amount of pixels to scroll to in x direction
* @param yPixel Amount of pixels to scroll to in y direction
* @return CameraUpdate Final Camera Position
* @deprecated use {@link MapboxMap#scrollBy(float, float)} for more precise displacements when using a padded map.
*/
@Deprecated
public static CameraUpdate scrollBy(float xPixel, float yPixel) {
return new CameraMoveUpdate(xPixel, yPixel);
}
@@ -336,22 +338,27 @@ public final class CameraUpdateFactory {
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();
PointF targetPoint = new PointF(viewPortWidth / 2 + x, viewPortHeight / 2 + y);
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
);
// Convert point to LatLng
LatLng latLng = projection.fromScreenLocation(targetPoint);
CameraPosition previousPosition = mapboxMap.getCameraPosition();
return new CameraPosition.Builder()
.target(latLng != null ? latLng : previousPosition.target)
.zoom(previousPosition.zoom)
.tilt(previousPosition.tilt)
.bearing(previousPosition.bearing)
.build();
CameraPosition position =
new CameraPosition.Builder()
.target(latLng)
.zoom(previousPosition.zoom)
.tilt(previousPosition.tilt)
.bearing(previousPosition.bearing)
.build();
return position;
}
@Override

View File

@@ -866,6 +866,29 @@ public final class MapboxMap {
}
}
/**
* Scrolls the camera over the map, shifting the center of view by the specified number of pixels in the x and y
* directions.
*
* @param x Amount of pixels to scroll to in x direction
* @param y Amount of pixels to scroll to in y direction
*/
public void scrollBy(float x, float y) {
nativeMapView.moveBy(x, y);
}
/**
* Scrolls the camera over the map, shifting the center of view by the specified number of pixels in the x and y
* directions.
*
* @param x Amount of pixels to scroll to in x direction
* @param y Amount of pixels to scroll to in y direction
* @param duration Amount of time the scrolling should take
*/
public void scrollBy(float x, float y, long duration) {
nativeMapView.moveBy(x, y, duration);
}
//
// Reset North
//