Module javafx.graphics
Package javafx.animation

# Class Interpolator

java.lang.Object
javafx.animation.Interpolator

    public abstract class Interpolator
    extends Object

The abstract class defines several `interpolate` methods, which are used to calculate interpolated values. Various built-in implementations of this class are offered. Applications may choose to implement their own `Interpolator` to get custom interpolation behavior.

A custom `Interpolator` has to be defined in terms of a " `curve()`".

Since:
  JavaFX 2.0

- ## Field Summary

  Fields
  Modifier and Type | Field | Description
  --- | --- | ---
  `static Interpolator` | `DISCRETE` | Built-in interpolator that provides discrete time interpolation.
  `static Interpolator` | `EASE_BOTH` | Built-in interpolator instance that provides ease in/out behavior.
  `static Interpolator` | `EASE_IN` | Built-in interpolator instance that provides ease in behavior.
  `static Interpolator` | `EASE_OUT` | Built-in interpolator instance that provides ease out behavior.
  `static Interpolator` | `LINEAR` | Built-in interpolator that provides linear time interpolation.

- ## Constructor Summary

  Constructors
  Modifier | Constructor | Description
  --- | --- | ---
  `protected` | `Interpolator()` | The constructor of `Interpolator`.

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `protected abstract double` | `curve​(double t)` | Mapping from [0.0..1.0] to itself.
  `boolean` | `interpolate​(boolean startValue, boolean endValue, double fraction)` | This method takes two `boolean` values along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.
  `double` | `interpolate​(double startValue, double endValue, double fraction)` | This method takes two `double` values along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.
  `int` | `interpolate​(int startValue, int endValue, double fraction)` | This method takes two `int` values along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.
  `long` | `interpolate​(long startValue, long endValue, double fraction)` | This method takes two `int` values along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.
  `Object` | `interpolate​(Object startValue, Object endValue, double fraction)` | This method takes two `Objects` along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.
  `static Interpolator` | `SPLINE​(double x1, double y1, double x2, double y2)` | Creates an `Interpolator`, which `curve()` is shaped using the spline control points defined by (`x1`, `y1` ) and (`x2`, `y2`).
  `static Interpolator` | `TANGENT​(Duration t, double v)` | Creates a tangent interpolator, for which in-tangent and out-tangent are identical.
  `static Interpolator` | `TANGENT​(Duration t1, double v1, Duration t2, double v2)` | Create a tangent interpolator.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### DISCRETE

    public static final Interpolator DISCRETE
    Built-in interpolator that provides discrete time interpolation. The return value of `interpolate()` is `endValue` only when the input `fraction` is 1.0, and `startValue` otherwise.

  - ### LINEAR

    public static final Interpolator LINEAR
    Built-in interpolator that provides linear time interpolation. The return value of `interpolate()` is `startValue` + (`endValue` - `startValue`) * `fraction`.

  - ### EASE_BOTH

    public static final Interpolator EASE_BOTH
    Built-in interpolator instance that provides ease in/out behavior.

    An ease-both interpolator will make an animation start slow, then accelerate and slow down again towards the end, all in a smooth manner.

    The implementation uses the algorithm for easing defined in SMIL 3.0 with an acceleration and deceleration factor of 0.2, respectively.

  - ### EASE_IN

    public static final Interpolator EASE_IN
    Built-in interpolator instance that provides ease in behavior.

    An ease-in interpolator will make an animation start slow and then accelerate smoothly.

    The implementation uses the algorithm for easing defined in SMIL 3.0 with an acceleration factor of 0.2.

  - ### EASE_OUT

    public static final Interpolator EASE_OUT
    Built-in interpolator instance that provides ease out behavior.

    An ease-out interpolator will make an animation slow down toward the end smoothly.

    The implementation uses the algorithm for easing defined in SMIL 3.0 with an deceleration factor of 0.2.

- ## Constructor Details

  - ### Interpolator

    protected Interpolator()
    The constructor of `Interpolator`.

- ## Method Details

  - ### SPLINE

    public static Interpolator SPLINE​(double x1, double y1, double x2, double y2)
    Creates an `Interpolator`, which `curve()` is shaped using the spline control points defined by (`x1`, `y1` ) and (`x2`, `y2`). The anchor points of the spline are implicitly defined as (`0.0`, `0.0`) and (`1.0`, `1.0`).
    Parameters:
      `x1` - x coordinate of the first control point
      `y1` - y coordinate of the first control point
      `x2` - x coordinate of the second control point
      `y2` - y coordinate of the second control point
    Returns:
      A spline interpolator

  - ### TANGENT

    public static Interpolator TANGENT​(Duration t1, double v1, Duration t2, double v2)
    Create a tangent interpolator. A tangent interpolator allows to define the behavior of an animation curve very precisely by defining the tangents close to a key frame. A tangent interpolator defines the behavior to the left and to the right of a key frame, therefore it is only useful within a `Timeline`. If used in a `KeyFrame` after a KeyFrame that has different interpolator, it's treated as if the out-tangent of that KeyFrame was equal to the value in the KeyFrame.

    The parameters define the tangent of the animation curve for the in tangent (before a key frame) and out tangent (after a key frame). Each tangent is specified with a pair, the distance to the key frame and the value of the tangent at this moment.

    The interpolation then follows a bezier curve, with 2 control points defined by the specified tangent and positioned at 1/3 of the duration before the second KeyFrame or after the first KeyFrame. See the picture above.

    Parameters:
      `t1` - The delta time of the in-tangent, relative to the KeyFrame
      `v1` - The value of the in-tangent
      `t2` - The delta time of the out-tangent, relative to the KeyFrame
      `v2` - The value of the out-tangent
    Returns:
      the new tangent interpolator

  - ### TANGENT

    public static Interpolator TANGENT​(Duration t, double v)
    Creates a tangent interpolator, for which in-tangent and out-tangent are identical. This is especially useful for the first and the last key frame of a `Timeline`, because for these key frames only one tangent is used.
    Parameters:
      `t` - The delta time of the tangent
      `v` - The value of the tangent
    Returns:
      the new Tangent interpolator
    See Also:
      `TANGENT(Duration, double, Duration, double)`

  - ### interpolate

    public Object interpolate​(Object startValue, Object endValue, double fraction)
    This method takes two `Objects` along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.

    If both `Objects` implement `Number`, their values are interpolated. If `startValue` implements `Interpolatable` the calculation defined in `interpolate()` is used. If neither of these conditions are met, a discrete interpolation is used, i.e. `endValue` is returned if and only if `fraction` is `1.0`, otherwise `startValue` is returned.

    Before calculating the interpolated value, the fraction is altered according to the function defined in `curve()`.

    Parameters:
      `startValue` - start value
      `endValue` - end value
      `fraction` - a value between 0.0 and 1.0
    Returns:
      interpolated value

  - ### interpolate

    public boolean interpolate​(boolean startValue, boolean endValue, double fraction)
    This method takes two `boolean` values along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.

    Before calculating the interpolated value, the fraction is altered according to the function defined in `curve()`.

    Parameters:
      `startValue` - the first data point
      `endValue` - the second data point
      `fraction` - the fraction in `[0.0...1.0]`
    Returns:
      the interpolated value

  - ### interpolate

    public double interpolate​(double startValue, double endValue, double fraction)
    This method takes two `double` values along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.

    Before calculating the interpolated value, the fraction is altered according to the function defined in `curve()`.

    Parameters:
      `startValue` - the first data point
      `endValue` - the second data point
      `fraction` - the fraction in `[0.0...1.0]`
    Returns:
      the interpolated value

  - ### interpolate

    public int interpolate​(int startValue, int endValue, double fraction)
    This method takes two `int` values along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.

    Before calculating the interpolated value, the fraction is altered according to the function defined in `curve()`.

    Parameters:
      `startValue` - the first data point
      `endValue` - the second data point
      `fraction` - the fraction in `[0.0...1.0]`
    Returns:
      the interpolated value

  - ### interpolate

    public long interpolate​(long startValue, long endValue, double fraction)
    This method takes two `int` values along with a `fraction` between `0.0` and `1.0` and returns the interpolated value.

    Before calculating the interpolated value, the fraction is altered according to the function defined in `curve()`.

    Parameters:
      `startValue` - the first data point
      `endValue` - the second data point
      `fraction` - the fraction in `[0.0...1.0]`
    Returns:
      the interpolated value

  - ### curve

    protected abstract double curve​(double t)
    Mapping from [0.0..1.0] to itself.
    Parameters:
      `t` - time, but normalized to the range [0.0..1.0], where 0.0 is the start of the current interval, while 1.0 is the end of the current interval. Usually a function that increases monotonically.
    Returns:
      the curved value