fling velocity is in pixel-per-second, so make it dpi-dependent

This commit is contained in:
Hannes Janetzek 2013-01-24 22:13:00 +01:00
parent 42964861b8
commit de88c33701

View File

@ -22,6 +22,7 @@ import org.oscim.overlay.OverlayManager;
import android.content.Context; import android.content.Context;
import android.os.CountDownTimer; import android.os.CountDownTimer;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.GestureDetector; import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener; import android.view.GestureDetector.OnDoubleTapListener;
@ -70,6 +71,8 @@ final class TouchHandler implements OnGestureListener, OnScaleGestureListener, O
private final ScaleGestureDetector mScaleGestureDetector; private final ScaleGestureDetector mScaleGestureDetector;
private final GestureDetector mGestureDetector; private final GestureDetector mGestureDetector;
private final float dpi;
/** /**
* @param context * @param context
* the Context * the Context
@ -87,10 +90,15 @@ final class TouchHandler implements OnGestureListener, OnScaleGestureListener, O
mGestureDetector = new GestureDetector(context, this); mGestureDetector = new GestureDetector(context, this);
mGestureDetector.setOnDoubleTapListener(this); mGestureDetector.setOnDoubleTapListener(this);
mInterpolator = new DecelerateInterpolator(1.5f); mInterpolator = new DecelerateInterpolator(2f);
mScroller = new Scroller(mMapView.getContext(), mInterpolator); mScroller = new Scroller(mMapView.getContext(), mInterpolator);
mLinearInterpolator = new DecelerateInterpolator(0.8f);//new android.view.animation.LinearInterpolator(); mLinearInterpolator = new DecelerateInterpolator(0.8f);//new android.view.animation.LinearInterpolator();
DisplayMetrics metrics = mapView.getResources().getDisplayMetrics();
dpi = metrics.xdpi;
Log.d(TAG, "dpi is: " + dpi);
} }
/** /**
@ -363,8 +371,8 @@ final class TouchHandler implements OnGestureListener, OnScaleGestureListener, O
if (mScaling || mWasMulti) if (mScaling || mWasMulti)
return true; return true;
int w = Tile.TILE_SIZE * 20; int w = Tile.TILE_SIZE * 6;
int h = Tile.TILE_SIZE * 20; int h = Tile.TILE_SIZE * 6;
mScrollX = 0; mScrollX = 0;
mScrollY = 0; mScrollY = 0;
@ -374,6 +382,7 @@ final class TouchHandler implements OnGestureListener, OnScaleGestureListener, O
} }
if (mMapView.enablePagedFling) { if (mMapView.enablePagedFling) {
double a = Math.sqrt(velocityX * velocityX + velocityY * velocityY); double a = Math.sqrt(velocityX * velocityX + velocityY * velocityY);
float vx = (float) (velocityX / a); float vx = (float) (velocityX / a);
@ -387,7 +396,9 @@ final class TouchHandler implements OnGestureListener, OnScaleGestureListener, O
float move = Math.min(mMapView.getWidth(), mMapView.getHeight()) * 2 / 3; float move = Math.min(mMapView.getWidth(), mMapView.getHeight()) * 2 / 3;
mMapPosition.animateTo(vx * move, vy * move, 250); mMapPosition.animateTo(vx * move, vy * move, 250);
} else { } else {
mScroller.fling(0, 0, Math.round(velocityX) / 2, Math.round(velocityY) / 2, float s = (300 / dpi) / 2;
mScroller.fling(0, 0, Math.round(velocityX * s),
Math.round(velocityY * s),
-w, w, -h, h); -w, w, -h, h);
mTimer = new CountDownTimer(1000, 16) { mTimer = new CountDownTimer(1000, 16) {