Computer >> Máy Tính >  >> Lập trình >> Javascript

Giải thích hoạt động của Animations trong React Native?

React Native cung cấp thành phần Animation giúp bổ sung nhiều tương tác hơn cho các thành phần có sẵn. Thành phần animation có thể được sử dụng để tạo hiệu ứng cho View, Text, Image, ScrollView, FlatList và SectionList.

React Native cung cấp hai loại hoạt ảnh -

  • API hoạt hình
  • LayoutAnimation

API hoạt ảnh

Api hoạt hình giúp cung cấp hoạt ảnh dựa trên thời gian dựa trên đầu vào / đầu ra. Ví dụ này, chúng tôi sẽ thay đổi động chiều rộng và chiều cao của hộp bằng api định thời được điều chỉnh.

Để làm việc với hoạt ảnh, hãy nhập thành phần như được hiển thị bên dưới -

import { Animated } from 'react-native'

Để làm việc với Animation, trước tiên chúng ta cần cấu hình nó như hình dưới đây -

Hàm Animated.timing () sử dụng các hàm giảm bớt và giá trị đã cho sẽ được tính theo thời gian. Chức năng nới lỏng mặc định được sử dụng là easyInOut, bạn có thể sử dụng một chức năng khác hoặc xác định chức năng của riêng bạn.

Cấu trúc của hàm Animated.timing () như sau -

Animated.timing(animateparam, {
   toValue: 100,
   easing: easingfunc,
   duration: timeinseconds
}).start();

Trong ví dụ, chúng tôi sẽ tạo hoạt ảnh chiều rộng và chiều cao của Chế độ xem, vì vậy tôi đã khởi tạo nó trước như sau -

AnimatedWidth và animationHeight được khởi tạo bên trong componentWillMount asfollows -

componentWillMount = () => {
   this.animatedWidth = new Animated.Value(50)
   this.animatedHeight = new Animated.Value(100)
}

Sau đó được thêm vào chức năng Animated.timing như sau -

Animated.timing(this.animatedWidth, {
   toValue: 200,
   duration: 1000
}).start()
Animated.timing(this.animatedHeight, {
   toValue: 500,
   duration: 500
}).start()

Hoạt ảnh

Thành phần TouchableOpacity được sử dụng trênPress trong đó functionthis.animatedBox được gọi là có chức năng Animated.timing sẽ thực hiện theanimation. Chiều rộng và chiều cao của Chế độ xem sẽ thay đổi khi nhấn thành phần TouchableOpacity.

Ví dụ

import React, { Component } from 'react'
import { View, StyleSheet, Animated, TouchableOpacity } from 'react-native'
class Animations 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 Animations
const styles = StyleSheet.create({
   container: {
      padding:100,
      justifyContent: 'center',
      alignItems: 'center'
   },
   box: {
      backgroundColor: 'gray',
      width: 50,
      height: 100
   }
})

Đầu ra

Sau đây là chế độ xem trên Thiết bị iOS và Android -

Giải thích hoạt động của Animations trong React Native?

Chạm vào hộp hình chữ nhật màu xám để xem nó hoạt ảnh -

Giải thích hoạt động của Animations trong React Native?

API LayoutAnimation

LayoutAnimation cung cấp cho bạn nhiều quyền kiểm soát hơn so với API Animated và cho phép youto định cấu hình toàn cầu tạo và cập nhật hoạt ảnh được sử dụng trong các chế độ xem cho chu kỳ hiển thị / bố cục tiếp theo.

Để làm việc với api hoạt ảnh bố cục, bạn cần nhập nó như sau -

import { LayoutAnimation } from 'react-native';:

Ví dụ:sử dụng LayoutAnimation

Để LayoutAnimation hoạt động trong Android, bạn cần thêm các dòng sau -

UIManager.setLayoutAnimationEnabledExperimental &&
UIManager.setLayoutAnimationEnabledExperimental(true);
import React from 'react';
import {
   NativeModules,
   LayoutAnimation,
   Text,
   TouchableOpacity,
   StyleSheet,
   View,
} from 'react-native';
const { UIManager } = NativeModules;
UIManager.setLayoutAnimationEnabledExperimental &&
UIManager.setLayoutAnimationEnabledExperimental(true);
export default class App extends React.Component {
   state = {
      w: 50,
      h: 50,
   };
   animatecircle = () => {
      LayoutAnimation.spring();
      this.setState({w: this.state.w + 10, h: this.state.h + 10})
   }
   render() {
      return (
         <TouchableOpacity style = {styles.container} onPress={this.animatecircle}>
            <View style={[styles.circle, {width: this.state.w, height: this.state.h}]} />
               </TouchableOpacity>
         );
      }
   }
   const styles = StyleSheet.create({
      container: {
         flex: 1,
         alignItems: 'center',
         justifyContent: 'center',
   },
   circle: {
      width: 200,
      height: 200,
      borderRadius: '50%',
      backgroundColor: 'green',
   },
});

Đầu ra

Giải thích hoạt động của Animations trong React Native?

Nhấn vào vòng kết nối và xem nó đang hoạt ảnh.

Giải thích hoạt động của Animations trong React Native?