Scale probably isn't the correct word, and is slightly confusing, but with interpolation
this._animatedValue = new Animated.Value(0); this._animatedValue.interpolate({ inputRange: [0, 1], outputRange: [0, 100], });
Taking an input range from 0 to 1 and having the output from 0 to 100
If we were to have an animation that animates the value from 0 to 1 over the course of 1 second then each 100 milliseconds would cause a step of 10
Animated.timing(this._animatedValue, { toValue: 1, duration: 1000, });
Outputs
input: 0 => 0ms => output: 0 input: .1 => 100ms => output: 10 input: .2 => 200ms => output: 20 input: .3 => 300ms => output: 30 .... input: 1 => 1000ms => output: 100
The reverse is also true.
this._animatedValue = new Animated.Value(0); this._animatedValue.interpolate({ inputRange: [0, 100], outputRange: [0, 1], });
We can scale our input values down to a smaller output range.
Animated.timing(this._animatedValue, { toValue: 100, duration: 1000, });
Outputs
input: 0 => 0ms => output: 0 input: 10 => 100ms => output: .1 input: 20 => 200ms => output: .2 input: 30 => 300ms => output: .3 .... input: 100 => 1000ms => output: 1
With interpolation you can map arbitrary inputRanges to arbitrary outputRanges. The only requirement is that inputRange is ascending, and that the outputRange has the same amount of values as inputRange.
this._animatedValue = new Animated.Value(0); this._animatedValue.interpolate({ inputRange: [0, 30, 50, 80, 100], outputRange: [0, -30, -50, 0, 200], });
Now what happens if we trigger a 1 second animation to 100
Animated.timing(this._animatedValue, { toValue: 100, duration: 1000, });
0 => 0, 30 => -30 at the 300 millisecond point, and then 50 => -50 at the 500 millisecond point.-50 to 0 from the 500 millisecond to 800 millisecond point.200 milliseconds we shoot from 0 to 200.