code: protected void stopPanning(HumanInputEvent<?> event) {
  		dragging = false;
  		mapPresenter.setCursor("default");
  		if (null != event && dragPositions.size() >= 2) {
  			logger.info("kinetics started");
  			// start kinetic animation
  			Coordinate dragStart = toWorld(dragPositions.get(0));
  			Coordinate dragStop = toWorld(dragPositions.get(dragPositions.size() - 1));
  			long timeStart = dragTimes.get(0).getTime();
  			long timeStop = dragTimes.get(dragTimes.size() - 1).getTime();
  			int delta = (int) (timeStop - timeStart);
  			long delay = new Date().getTime() - timeStop;
  			if (delta > 0 && delay < MAX_KINETIC_DELAY) {
  				// map moves in the inverse direction !
  				Coordinate direction = subtract(dragStart, dragStop);
  				double distance = abs(direction);
  				Coordinate current = mapPresenter.getViewPort().getPosition();
  				double resolution = mapPresenter.getViewPort().getResolution();
  				KineticTrajectory trajectory = new KineticTrajectory(new View(current, resolution), direction, distance
  						/ delta);
  				mapPresenter.getViewPort().registerAnimation(
  						new NavigationAnimationImpl(mapPresenter.getViewPort(), mapPresenter.getEventBus(), trajectory,
  								(int) trajectory.getDuration()));
  			} else {
  				mapPresenter.getViewPort().stopInteraction();
  			}
  		}
  	}
docs: ------------------------------------------------------------------------