/** * Copyright (c) 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * The examples provided by Facebook are for non-commercial testing and * evaluation purposes only. * * Facebook reserves all rights not expressly granted. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * @flow */ 'use strict'; const React = require('react'); const ReactNative = require('react-native'); const { View, Text, Animated, StyleSheet, TouchableWithoutFeedback, } = ReactNative; class Tester extends React.Component { state = { native: new Animated.Value(0), js: new Animated.Value(0), }; current = 0; onPress = () => { this.current = this.current ? 0 : 1; const config = { ...this.props.config, toValue: this.current, }; Animated[this.props.type](this.state.native, { ...config, useNativeDriver: true }).start(); Animated[this.props.type](this.state.js, { ...config, useNativeDriver: false }).start(); }; render() { return ( Native: {this.props.children(this.state.native)} JavaScript: {this.props.children(this.state.js)} ); } } class ValueListenerExample extends React.Component { state = { anim: new Animated.Value(0), progress: 0, }; _current = 0; componentDidMount() { this.state.anim.addListener((e) => this.setState({ progress: e.value })); } componentWillUnmount() { this.state.anim.removeAllListeners(); } _onPress = () => { this._current = this._current ? 0 : 1; const config = { duration: 1000, toValue: this._current, }; Animated.timing(this.state.anim, { ...config, useNativeDriver: true }).start(); }; render() { return ( Value: {this.state.progress} ); } } const styles = StyleSheet.create({ row: { padding: 10, zIndex: 1, }, block: { width: 50, height: 50, backgroundColor: 'blue', }, }); exports.framework = 'React'; exports.title = 'Native Animated Example'; exports.description = 'Test out Native Animations'; exports.examples = [ { title: 'Multistage With Multiply and rotation', description: 'description', render: function() { return ( {anim => ( )} ); }, }, { title: 'Multistage With Multiply', description: 'description', render: function() { return ( {anim => ( )} ); }, }, { title: 'Scale interpolation', description: 'description', render: function() { return ( {anim => ( )} ); }, }, { title: 'Opacity without interpolation', description: 'description', render: function() { return ( {anim => ( )} ); }, }, { title: 'Rotate interpolation', description: 'description', render: function() { return ( {anim => ( )} ); }, }, { title: 'translateX => Animated.spring', description: 'description', render: function() { return ( {anim => ( )} ); }, }, { title: 'Animated value listener', platform: 'android', render: function() { return ( ); }, }, ];