modify zoom-in gesture to scale from focus center
This commit is contained in:
parent
b210c5ee73
commit
7647e1827e
@ -27,6 +27,8 @@ class ScaleListener implements ScaleGestureDetector.OnScaleGestureListener {
|
|||||||
private MapViewPosition mMapPosition;
|
private MapViewPosition mMapPosition;
|
||||||
private float mCenterX;
|
private float mCenterX;
|
||||||
private float mCenterY;
|
private float mCenterY;
|
||||||
|
private float mFocusX;
|
||||||
|
private float mFocusY;
|
||||||
private float mScale;
|
private float mScale;
|
||||||
private boolean mBeginScale;
|
private boolean mBeginScale;
|
||||||
|
|
||||||
@ -43,9 +45,9 @@ class ScaleListener implements ScaleGestureDetector.OnScaleGestureListener {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onScale(ScaleGestureDetector gd) {
|
public boolean onScale(ScaleGestureDetector gd) {
|
||||||
|
|
||||||
float focusX = gd.getFocusX();
|
|
||||||
float focusY = gd.getFocusY();
|
|
||||||
mScale = gd.getScaleFactor();
|
mScale = gd.getScaleFactor();
|
||||||
|
mFocusX = gd.getFocusX() - mCenterX;
|
||||||
|
mFocusY = gd.getFocusY() - mCenterY;
|
||||||
|
|
||||||
mSumScale *= mScale;
|
mSumScale *= mScale;
|
||||||
|
|
||||||
@ -60,7 +62,7 @@ class ScaleListener implements ScaleGestureDetector.OnScaleGestureListener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
mMapPosition.scaleMap(mScale, focusX - mCenterX, focusY - mCenterY);
|
mMapPosition.scaleMap(mScale, mFocusX, mFocusY);
|
||||||
mMapView.redrawTiles();
|
mMapView.redrawTiles();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -85,6 +87,7 @@ class ScaleListener implements ScaleGestureDetector.OnScaleGestureListener {
|
|||||||
@Override
|
@Override
|
||||||
public void onScaleEnd(ScaleGestureDetector gd) {
|
public void onScaleEnd(ScaleGestureDetector gd) {
|
||||||
// Log.d("ScaleListener", "Sum " + mSumScale + " " + (mTimeEnd - mTimeStart));
|
// Log.d("ScaleListener", "Sum " + mSumScale + " " + (mTimeEnd - mTimeStart));
|
||||||
|
|
||||||
if (mTimer == null && mTimeEnd - mTimeStart < 150
|
if (mTimer == null && mTimeEnd - mTimeStart < 150
|
||||||
&& (mSumScale < 0.99 || mSumScale > 1.01)) {
|
&& (mSumScale < 0.99 || mSumScale > 1.01)) {
|
||||||
|
|
||||||
@ -128,12 +131,11 @@ class ScaleListener implements ScaleGestureDetector.OnScaleGestureListener {
|
|||||||
mPrevScale += scale;
|
mPrevScale += scale;
|
||||||
|
|
||||||
if (mZooutOut) {
|
if (mZooutOut) {
|
||||||
scale = 1 - scale;
|
mMapPosition.scaleMap(1 - scale, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
scale = 1 + scale;
|
mMapPosition.scaleMap(1 + scale, mFocusX, mFocusY);
|
||||||
}
|
}
|
||||||
|
|
||||||
mMapPosition.scaleMap(scale, 0, 0);
|
|
||||||
mMapView.redrawTiles();
|
mMapView.redrawTiles();
|
||||||
|
|
||||||
if (tick == 0)
|
if (tick == 0)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user