modify zoom-in gesture to scale from focus center

This commit is contained in:
Hannes Janetzek 2012-09-04 14:25:18 +02:00
parent b210c5ee73
commit 7647e1827e

View File

@ -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)