Class Motion
Abstracts the notion of physical motion over time from a numeric location to another. This class can be subclassed to implement any motion equation for appropriate physics effects.
This class relies on the System.currentTimeMillis() method to provide transitions between coordinates. The motion can be subclassed to provide every type of motion feel from parabolic motion to spline and linear motion. The default implementation provides a simple algorithm giving the feel of acceleration and deceleration.
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedMotion(int sourceValue, double initVelocity, double friction) protectedMotion(int sourceValue, float initVelocity, float friction) Construct a velocity motionprotectedMotion(int sourceValue, int destinationValue, int duration) Construct a point/destination motion -
Method Summary
Modifier and TypeMethodDescriptionintGets the number of sampling points that can be used by#getVelocity().static MotioncreateCubicBezierMotion(int sourceValue, int destinationValue, int duration, float p0, float p1, float p2, float p3) Creates a standard Cubic Bezier motion to implement functions such as ease-in/out etc.static MotioncreateDecelerationMotion(int sourceValue, int destinationValue, int duration) Creates a deceleration motion starting from source value all the way to destination valuestatic MotioncreateDecelerationMotionFrom(Motion motion, int maxDestinationValue, int maxDuration) Creates a deceleration motion starting from the current position of another motion.static MotioncreateEaseInMotion(int sourceValue, int destinationValue, int duration) Equivalent to createCubicBezierMotion with 0f, 0.42f, 1f, 1f as arguments.static MotioncreateEaseInOutMotion(int sourceValue, int destinationValue, int duration) Equivalent to createCubicBezierMotion with 0, 0.42, 0.58, 1.0 as arguments.static MotioncreateEaseMotion(int sourceValue, int destinationValue, int duration) Equivalent to createCubicBezierMotion with 0f, 0.25f, 0.25f, 1 as arguments.static MotioncreateEaseOutMotion(int sourceValue, int destinationValue, int duration) Equivalent to createCubicBezierMotion with 0f, 0f, 0.58f, 1.0f as arguments.static MotioncreateExponentialDecayMotion(int sourceValue, int maxValue, double initVelocity, double timeConstant) static MotioncreateFrictionMotion(int sourceValue, int maxValue, float initVelocity, float friction) Creates a friction motion starting from source with initial speed and the frictionstatic MotioncreateLinearColorMotion(int sourceValue, int destinationValue, int duration) Creates a linear motion starting from source value all the way to destination value for a color value.static MotioncreateLinearMotion(int sourceValue, int destinationValue, int duration) Creates a linear motion starting from source value all the way to destination valuestatic MotioncreateSplineMotion(int sourceValue, int destinationValue, int duration) Creates a spline motion starting from source value all the way to destination valuevoidfinish()Sends the motion to the end time instantly which is useful for flushing an animationlongReturns the current time within the motion relative to start timeintThe number to which we will reach when the motion is finishedintReturns the animation durationintThe number from which we are starting (usually indicating animation start position)protected longThe value of System.currentTimemillis() when motion was startedintgetValue()Returns the value for the motion for the current clock time.doubleGets an approximation of the current velocity in pixels per millisecond.booleanbooleanReturns true if the motion has run its course and has finished meaning the current time is greater than startTime + duration.static booleanAllows debugging motion behavior by slowing motions down 50 fold, doesn't apply to friction motionvoidsetCurrentMotionTime(long currentMotionTime) Allows overriding the getCurrentMotionTime method value with a manual value to provide full developer control over animation speed/position.static voidsetSlowMotion(boolean aSlowMotion) Allows debugging motion behavior by slowing motions down 50 fold, doesn't apply to friction motionvoidsetSourceValue(int sourceValue) The number from which we are starting (usually indicating animation start position)voidsetStartTime(long startTime) Sets the start time of the motionvoidstart()Sets the start time to the current time
-
Constructor Details
-
Motion
protected Motion(int sourceValue, int destinationValue, int duration) Construct a point/destination motion
Parameters
-
sourceValue: starting value -
destinationValue: destination value -
duration: motion duration
-
-
Motion
protected Motion(int sourceValue, float initVelocity, float friction) Construct a velocity motion
Parameters
-
sourceValue: starting value -
initVelocity: initial velocity -
friction: degree of friction
-
-
Motion
protected Motion(int sourceValue, double initVelocity, double friction)
-
-
Method Details
-
isSlowMotion
public static boolean isSlowMotion()Allows debugging motion behavior by slowing motions down 50 fold, doesn't apply to friction motion
Returns
the slowMotion
-
setSlowMotion
public static void setSlowMotion(boolean aSlowMotion) Allows debugging motion behavior by slowing motions down 50 fold, doesn't apply to friction motion
Parameters
aSlowMotion: the slowMotion to set
-
createCubicBezierMotion
public static Motion createCubicBezierMotion(int sourceValue, int destinationValue, int duration, float p0, float p1, float p2, float p3) Creates a standard Cubic Bezier motion to implement functions such as ease-in/out etc.
Parameters
-
sourceValue: starting value -
destinationValue: destination value -
duration: motion duration -
p0: argument to the bezier function -
p1: argument to the bezier function -
p2: argument to the bezier function -
p3: argument to the bezier function
Returns
Motion instance
-
-
createEaseInOutMotion
Equivalent to createCubicBezierMotion with 0, 0.42, 0.58, 1.0 as arguments.
Parameters
-
sourceValue: starting value -
destinationValue: destination value -
duration: motion duration
Returns
Motion instance
-
-
createEaseMotion
Equivalent to createCubicBezierMotion with 0f, 0.25f, 0.25f, 1 as arguments.
Parameters
-
sourceValue: starting value -
destinationValue: destination value -
duration: motion duration
Returns
Motion instance
-
-
createEaseInMotion
Equivalent to createCubicBezierMotion with 0f, 0.42f, 1f, 1f as arguments.
Parameters
-
sourceValue: starting value -
destinationValue: destination value -
duration: motion duration
Returns
Motion instance
-
-
createEaseOutMotion
Equivalent to createCubicBezierMotion with 0f, 0f, 0.58f, 1.0f as arguments.
Parameters
-
sourceValue: starting value -
destinationValue: destination value -
duration: motion duration
Returns
Motion instance
-
-
createLinearMotion
Creates a linear motion starting from source value all the way to destination value
Parameters
-
sourceValue: the number from which we are starting (usually indicating animation start position) -
destinationValue: the number to which we are heading (usually indicating animation destination) -
duration: @param duration the length in milliseconds of the motion (time it takes to get from sourceValue to destinationValue)
Returns
new motion object
-
-
createLinearColorMotion
Creates a linear motion starting from source value all the way to destination value for a color value. Unlike a regular linear motion a color linear motion is shifted based on channels where red, green & blue get shifted separately.
Parameters
-
sourceValue: the color from which we are starting -
destinationValue: the destination color -
duration: @param duration the length in milliseconds of the motion (time it takes to get from sourceValue to destinationValue)
Returns
new motion object
-
-
createSplineMotion
Creates a spline motion starting from source value all the way to destination value
Parameters
-
sourceValue: the number from which we are starting (usually indicating animation start position) -
destinationValue: the number to which we are heading (usually indicating animation destination) -
duration: @param duration the length in milliseconds of the motion (time it takes to get from sourceValue to destinationValue)
Returns
new motion object
-
-
createDecelerationMotion
Creates a deceleration motion starting from source value all the way to destination value
Parameters
-
sourceValue: the number from which we are starting (usually indicating animation start position) -
destinationValue: the number to which we are heading (usually indicating animation destination) -
duration: @param duration the length in milliseconds of the motion (time it takes to get from sourceValue to destinationValue)
Returns
new motion object
-
-
createDecelerationMotionFrom
public static Motion createDecelerationMotionFrom(Motion motion, int maxDestinationValue, int maxDuration) Creates a deceleration motion starting from the current position of another motion.
Parameters
-
motion: the number from which we are starting (usually indicating animation start position) -
maxDestinationValue: The farthest position to allow motion to go. -
maxDuration: The longest that the duration is allowed to proceed for.
Returns
new motion object
-
-
createFrictionMotion
public static Motion createFrictionMotion(int sourceValue, int maxValue, float initVelocity, float friction) Creates a friction motion starting from source with initial speed and the friction
Parameters
-
sourceValue: the number from which we are starting (usually indicating animation start position) -
maxValue: the maximum value for the friction -
initVelocity: the starting velocity -
friction: the motion friction
Returns
new motion object
-
-
createExponentialDecayMotion
public static Motion createExponentialDecayMotion(int sourceValue, int maxValue, double initVelocity, double timeConstant) -
finish
public void finish()Sends the motion to the end time instantly which is useful for flushing an animation -
start
public void start()Sets the start time to the current time -
getCurrentMotionTime
public long getCurrentMotionTime()Returns the current time within the motion relative to start time
Returns
long value representing System.currentTimeMillis() - startTime
-
setCurrentMotionTime
public void setCurrentMotionTime(long currentMotionTime) Allows overriding the getCurrentMotionTime method value with a manual value to provide full developer control over animation speed/position.
Parameters
currentMotionTime: the time in milliseconds for the motion.
-
isDecayMotion
public boolean isDecayMotion() -
isFinished
public boolean isFinished()Returns true if the motion has run its course and has finished meaning the current time is greater than startTime + duration.
Returns
true if System.currentTimeMillis() > duration + startTime or the last returned value is the destination value
-
getValue
public int getValue()Returns the value for the motion for the current clock time. The value is dependent on the Motion type.
Returns
a value that is relative to the source value
-
getVelocity
public double getVelocity()Gets an approximation of the current velocity in pixels per millisecond.
NOTE: If
#countAvailableVelocitySamplingPoints()0Returns
Current velocity in pixels per millisecond.
Since
8.0
-
countAvailableVelocitySamplingPoints
public int countAvailableVelocitySamplingPoints()Gets the number of sampling points that can be used by
#getVelocity(). A minimum of 2 sampling points are required for the result of#getVelocity()to have any meaning.Returns
The number of sampling points that can be used by
#getVelocity().Since
8.0
-
getSourceValue
public int getSourceValue()The number from which we are starting (usually indicating animation start position)
Returns
the source value
-
setSourceValue
public void setSourceValue(int sourceValue) The number from which we are starting (usually indicating animation start position)
Parameters
sourceValue: the source value
-
getDestinationValue
public int getDestinationValue()The number to which we will reach when the motion is finished
Returns
the source value
-
getStartTime
protected long getStartTime()The value of System.currentTimemillis() when motion was started
Returns
the start time
-
setStartTime
public void setStartTime(long startTime) Sets the start time of the motion
Parameters
startTime: the starting time
-
getDuration
public int getDuration()Returns the animation duration
Returns
animation duration in milliseconds
-