最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • React Native中的动画

    正文概述 掘金(梦兮林夕)   2021-08-12   732

    这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战

    Animated

    Animated使得开发者可以简洁地实现各种各样的动画和交互方式,并且具备极高的性能。Animated旨在以声明的形式来定义动画的输入与输出,在其中建立一个可配置的变化函数,然后使用start/stop方法来控制动画按顺序执行。 Animated仅封装了 6 个可以动画化的组件:ViewTextImageScrollViewFlatListSectionList,不过你也可以使用Animated.createAnimatedComponent()来封装你自己的组件。

    下面是一个在加载时带有淡入动画效果的视图:

    import React, { useRef, useEffect } from 'react'
    import { Animated, Text, View } from 'react-native'
    
    const LinAnimate = props => {
        const fadeAnim = useRef(new Animated.Value(0)).current // 透明度初始值设为0
    
        useEffect(() => {
            Animated.timing(
                // 随时间变化而执行动画
                fadeAnim, // 动画中的变量值
                {
                    toValue: 1, // 透明度最终变为1,即完全不透明
                    duration: 10000 // 让动画持续一段时间
                }
            ).start() // 开始执行动画
        }, [fadeAnim])
    
        return (
            <Animated.View // 使用专门的可动画化的View组件
                style={{
                    ...props.style,
                    opacity: fadeAnim // 将透明度绑定到动画变量值
                }}
            >
                {props.children}
            </Animated.View>
        )
    }
    
    // 然后你就可以在组件中像使用`View`那样去使用`FadeInView`了
    export default () => {
        return (
            <View
                style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}
            >
                <LinAnimate
                    style={{
                        width: 250,
                        height: 50,
                        backgroundColor: 'powderblue'
                    }}
                >
                    <Text style={{ fontSize: 28, textAlign: 'center', margin: 10 }}>
                        Fading in
                    </Text>
                </LinAnimate>
            </View>
        )
    }
    

    配置动画

    动画拥有非常灵活的配置项。自定义的或预定义的 easing函数、延迟、持续时间、衰减系数、弹性常数等都可以在对应类型的动画中进行配置。

    Animated提供了多种动画类型,其中最常用的要属Animated.timing()。它可以使用一些预设的easing曲线函数来控制动画值的变化速度,也支持自定义的曲线函数。动画中通常使用easing曲线函数来控制物体的加速或减速变化。

    默认情况下timing使用easeInOut曲线,它使动画体逐渐加速到最大然后逐渐减速到停止。你可以通过传递easing参数来指定不同的变化速度,还支持自定义duration持续时间,甚至是动画开始前的delay延迟。

    示例:创建了一个 时长 2 秒的动画,在移动目标到最终位置前会稍微往后退一点:

    Animated.timing(this.state.xPosition, {
        toValue: 100,
        easing: Easing.back(),
        duration: 2000
    }).start()
    

    组合动画

    多个动画可以通过parallel(同时执行)、sequence(顺序执行)、staggerdelay来组合使用。它们中的每一个都接受一个要执行的动画数组,并且自动在适当的时候调用start/stop

    例如,下面的动画滑行到一个停止点,然后它在平行旋转时弹回:

    Animated.sequence([
        // decay, then spring to start and twirl
        Animated.decay(position, {
            // coast to a stop
            velocity: { x: gestureState.vx, y: gestureState.vy }, // velocity from gesture release
            deceleration: 0.997
        }),
        Animated.parallel([
            // after decay, in parallel:
            Animated.spring(position, {
                toValue: { x: 0, y: 0 } // return to start
            }),
            Animated.timing(twirl, {
                // and twirl
                toValue: 360
            })
        ])
    ]).start() // start the sequence group
    

    起源地下载网 » React Native中的动画

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元