美文网首页React Native学习
react native 动画(Animations) 二

react native 动画(Animations) 二

作者: wanTag | 来源:发表于2018-07-23 17:40 被阅读10次
Animated详解

方法

static decay(value, config) 阻尼,将一个值根据阻尼系数动画到 0
static timing(value, config)根据时间函数来处理,常见的比如线性,加速开始减速结束等等,支持自定义时间函数
static spring(value, config) 弹性动画
static add(a, b) 将两个Animated.value相加,返回一个新的
static multiply(a, b) 将两个Animated.value相乘,返回一个新的
static modulo(a, modulus),将a对modulus取余,类似操作符%
static delay(time)延迟一段时间
static sequence(animations) 依次开始一组动画,后一个在前一个结束后才会开始,如果其中一个动画中途停止,则整个动画组停止
static parallel(animations, config?),同时开始一组动画,默认一个动画中途停止,则全都停止。可以通过设置stopTogether来重写这一特性
static stagger(time, animations),一组动画可以同时执行,但是会按照延迟依次开始
static event(argMapping, config?),利用手势,Scroll来手动控制动画的状态
static createAnimatedComponent(Component),自定义的让某一个Component支持动画

属性

Value 类型是AnimatedValue,驱动基本动画
AnimatedValueXY  类型是AnimatedValueXY,驱动二维动画

一个更加复杂动画
  • 一个AnimatedValue同时驱动两三个属性,透明度,Y的位置以及scale

constructor(props) {
        super(props);
        this.state = {
            currentAlpha: 1.0,//标志位,记录当前value
            fadeAnim: new Animated.Value(1.0)
        }
    }

 <Animated.Text
            style={{
                opacity: this.state.fadeAnim, //透明度动画
                transform: [{ //transform动画
                    translateX: this.state.fadeAnim.interpolate({
                        inputRange: [0, 1],
                        outputRange: [60, 0]//线性插值,0对应60,0.6对应30,1对应0
                    })
                }, {
                    scale: this.state.fadeAnim
                }]
            }}>
            Welcome to React Native!
        </Animated.Text>
手动控制动画

根据Scroll或者手势来手动的控制动画的过程
手动控制动画的核心是Animated.event,
这里的Aniamted.event的输入是一个数组,用来做数据绑定
比如, ScrollView中

onScroll = {Animated.event(
           //把contentOffset.x绑定给this.state.xOffset
           [{nativeEvent: {contentOffset: {x: this.state.xOffset}}}]
)}

核心代码:

 <ScrollView
                horizontal={true} //水平滑动
                showsHorizontalScrollIndicator={false}
                style={{width: deviceWidth, height: 300}}//设置大小
                onScroll={Animated.event(
                    [{nativeEvent: {contentOffset: {x: this.state.xOffset}}}]
                )}
                scrollEventThrottle={100}>
                <Animated.Image source={require('../../../img/s3.png')}
                                style={{
                                    height: 300,
                                    width: deviceWidth,
                                    opacity: this.state.xOffset.interpolate({//映射到0.0,1.0之间
                                        inputRange: [0, 375],
                                        outputRange: [1.0, 0.0]
                                    }),
                                }}
                                resizeMode="cover"/>
                <Image
                    style={{height: 300, width: deviceWidth}}
                    source={require('../../../img/s4.png')}
                    resizeMode="cover"/>
                <Image
                    style={{height: 300, width: deviceWidth}}
                    source={require('../../../img/s2.png')}
                    resizeMode="cover"/>
            </ScrollView>

参考:
https://blog.csdn.net/hello_hwc/article/details/51775696

相关文章

网友评论

    本文标题:react native 动画(Animations) 二

    本文链接:https://www.haomeiwen.com/subject/xejjmftx.html