public void zoomView(float factor) {
    float newScaling;

    if (scalingInterpolator.isActive()) {
      newScaling = scalingInterpolator.getEndValue() * factor;
    } else {
      newScaling = currentScaling * factor;
    }

    scalingInterpolator.setStartEndValues(currentScaling, newScaling);
    scalingInterpolator.startInterpolating();
  }
  public void translateView(float transX, float transY) {
    float newTransX;
    float newTransY;

    if (transX != 0.0f) {
      if (translationXInterpolator.isActive()) {
        newTransX = translationXInterpolator.getEndValue() + transX;
      } else {
        newTransX = currentTranslation[0] + transX;
      }
      translationXInterpolator.setStartEndValues(currentTranslation[0], newTransX);
      translationXInterpolator.startInterpolating();
    }

    if (transY != 0.0f) {
      if (translationYInterpolator.isActive()) {
        newTransY = translationYInterpolator.getEndValue() + transY;
      } else {
        newTransY = currentTranslation[1] + transY;
      }
      translationYInterpolator.setStartEndValues(currentTranslation[1], newTransY);
      translationYInterpolator.startInterpolating();
    }
  }