TutorialsCourses
Course Menu
React Native Animated for Beginners

setOffset

setOffset

Read documentation here http://facebook.github.io/react-native/docs/animated.html#setoffset.

setOffset is grouped in with other Animated.ValueXY methods, although it also exists on Animated.Value, because it is most typically used with ValueXY, PanResponder and the onPanResponderGrant calls.

setOffset allows us to set a base value on top of what our animated value is. For example if you set an offset of 100 and our Animated.Value is 50, then when the Animated.View requests the value it would be 150.

  componentWillMount: function() {
    this._animatedValue = new Animated.ValueXY()
    this._value = {x: 0, y: 0}

    this._animatedValue.addListener((value) => this._value = value);
	this._panResponder = PanResponder.create({
      onMoveShouldSetResponderCapture: () => true, //Tell iOS that we are allowing the movement
      onMoveShouldSetPanResponderCapture: () => true, // Same here, tell iOS that we allow dragging
      onPanResponderGrant: (e, gestureState) => {
        this._animatedValue.setOffset({x: this._value.x, y: this._value.y});
		this._animatedValue.setValue({x: 0, y: 0});
      },
      onPanResponderMove: Animated.event([
        null, {dx: this._animatedValue.x, dy: this._animatedValue.y}
      ]), // Creates a function to handle the movement and set offsets
      onPanResponderRelease: () => {
        this._animatedValue.flattenOffset(); // Flatten the offset so it resets the default positioning
      }
    });
  },


// To use

<Animated.View style={[styles.box, {transform: this._animatedValue.getTranslateTransform()}]} {...this._panResponder.panHandlers} />

In this context, setOffset is helping us accomplish in assigning the base offset to be the current position. We then clear the animated value and set it back to x: 0, y: 0. This allows us to utilize dx and dy, our delta movement, so that no jumps happen when the user presses on the box to move it.