前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >移动跨平台ReactNative动画组件Animated【14】

移动跨平台ReactNative动画组件Animated【14】

作者头像
江咏之
发布2022-06-17 14:55:39
8040
发布2022-06-17 14:55:39
举报
文章被收录于专栏:技术社区技术社区

React Native,是一个混合移动应用开发框架,是目前流行的跨平台移动应用开发框架之一。React Native 采用不同的方法进行混合移动应用开发。它不会生成原生 UI 组件,而是基于 React,React Native 是一个用于构建基于 Web 的交互界面的 JavaScript 库,因此会有更丰富的 UI 体验效果,同时也能够很好地调用底层框架的UI使用。

React Native 动画组件 Animated

动作 给予一个物体生命。比如一个石头,是不会动的,除非外力,不然它永远在那里。

而有生命的物体,会有各种动作,可以从一个地方走到另一个地方,可以模仿其它动物,会吃,会喝,会睡觉。

App 也一样。如果只是简单的展示,浏览它的人就会觉得枯燥无味。但一定用户的点击有了响应,那就会觉得特别亲切。

动画是在动作的基础上更上一层,它对开始到结束的动作结果赋予了变化的过程。让使用者可以从视觉感知的看到动作的变化。

Android 和 iOS 原生自带了超级多的动画,比如 Android 动画 就可以分为三大类:逐帧动画(Frame)补间动画(Tween)属性动画 (Property)

而 iOS 也毫不逊色,通过 Core Animation 提供了 基础动画(CABasicAnimation)关键帧动画(CAKeyframeAnimation)组动画(CAAnimationGroup)过渡动画(CATransition)

React Native 是一个跨平台的开发环境。既然要跨平台,那就必须通过一种通用的方式把 iOS 和 Android 的动画包装起来。这个包装的结果就是 动画组件 Animated

React Native 动画组件 Animated

React Native 动画组件 Animated 是对 Android 和 iOS 动画的封装,以统一的接口的提供了为 React Native 提供了动画功能。

动画组件 Animated 提供的是一种值动画,也就是属性改变动画。也就是通过动态的不断的改变控件的某个属性的值来达到动画的目的。

当我们需要创建一个动画时,我们必须先初始化一个值。React Native Animated 组件提供了两种值类型

值类型

说明

Animated.Value()

单个值变化

Animated.ValueXY()

两个值变化

Animated 组件提供了三种类型来控制动画的缓动过程。

函数

说明

Animated.decay()

以摩擦力模型来控制动画的缓动,简单的说就是以初始速度开始并逐渐减速到停止

Animated.spring()

使用弹簧物理模型来控制动画的缓动

Animated.timing()

使用时间来控制动画的缓动

默认情况下, React Native 只能对以下组件提供动画功能

代码语言:javascript
复制
Animated.Image
Animated.ScrollView
Animated.Text
Animated.View
Animated.FlatList
Animated.SectionList

如果其它组件也需要动画动能,那么需要使用 createAnimatedComponent() 函数来开启动画功能。

总之,React Native 动画组件 Animated 有点复杂,详细功能可以直接参考文档。

React Native 动画组件 Animated 的创建过程

config 可配置的参数如下

参数

说明

toValue

用于设置动画结束的值

duration

动画时长,单位为 毫秒,默认值是 500。

easing

时间缓动曲线函数。默认值为渐入渐出 Easing.inOut 别名 Easing.ease

delay

延迟多少毫秒才开始动画,默认值是 0

isInteraction

此动画是否在 InteractionManager 上创建 “交互句柄”。默认为 true

useNativeDriver

是否使用原生动画来实现,默认值是 false。

范例

下面的代码,我们使用 Animated 动画组件动态改变 `` 视图的

相关代码逻辑我们前面已经讲述了,我们就不再详细展开,直接上代码.

App.js
代码语言:javascript
复制
import React, { Component } from 'react'
import { View, StyleSheet, Animated, TouchableOpacity } from 'react-native'

class App extends Component {
   componentWillMount = () => {
      this.animatedWidth = new Animated.Value(50)
      this.animatedHeight = new Animated.Value(100)
   }
   animatedBox = () => {
      Animated.timing(this.animatedWidth, {
         toValue: 200,
         duration: 1000
      }).start()
      Animated.timing(this.animatedHeight, {
         toValue: 500,
         duration: 500
      }).start()
   }
   render() {
      const animatedStyle = {
            width: this.animatedWidth, 
            height: this.animatedHeight }
      return (
         <TouchableOpacity 
            style = {styles.container} 
            onPress = {this.animatedBox}>
            <Animated.View style = {[styles.box, animatedStyle]}/>
         </TouchableOpacity>
      )
   }
}
export default App

const styles = StyleSheet.create({
   container: {
      justifyContent: 'center',
      alignItems: 'center'
   },
   box: {
      backgroundColor: 'blue',
      width: 50,
      height: 100
   }
})

运行效果如下

当我们第一次点击的时候就会出现动画,当第二次点击的时候就不会出现了,因为这时候 TouchableOpacity 的长宽已经和动画结束时的值时一样的了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • React Native 动画组件 Animated
    • React Native 动画组件 Animated
      • React Native 动画组件 Animated 的创建过程
        • 范例
        相关产品与服务
        云开发 CloudBase
        云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档