interpolate

interpolate方法可以用来在动画执行的过程中,根据给定的起始、最终值,计算动画的每一步需要的值。比如:

this._animatedValue = new Animated.ValueXY();

this._opacityAnimation = this._animatedValue.x.interpolate({
    inputRange: [0, 150],
    outputRange: [1, .2],
    extrapolate: 'clamp'
});


this._bgColorAnimation = this._opacityAnimation.interpolate({
    inputRange: [.2, 1],
    outputRange: ['rgba(0,0,0,1)', 'rgba(255,255,255,1)']
})

上面的代码实现了一个位置动画,在x轴上移动,我们interplate(解析)为透明度。然后,在透明度被解析的时候,背景色也被从白色解析为黑色。

我们需要指明inputRange为[.2, 1]而不是[1, .2],是因为inputRange不能是降序的,它的值必须是升序。这不是书说只能从0开始,你可以从任何值开始,甚至是负数。

outputRange的值可以使任意值,任意的顺序,只要里面包含的值的数量和inputRange是一样的。

反转值

各种原因,你想要把动画的值通过interpolate反转。也许在手指划过屏幕的时候你想要让某个组件执行相反方向的动画。我们要做的就是让inputRangeoutputRange的值反过来。

比如:

this._animatedValue = new Animated.ValueXY();

this._reverseAnimatedValue = this._animatedValue.x.interpolate({
    inputRange: [0, 150],
    outputRange: [150, 0],
    extrapolate: 'clamp'
});

更多

因为插值器这部分内容比较重要,所以后面会有一整章门介绍这部分内容。

results matching ""

    No results matching ""