/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format * @flow strict-local */ 'use strict'; const React = require('react'); const { Animated, Image, MaskedViewIOS, StyleSheet, Text, View, } = require('react-native'); type Props = $ReadOnly<{||}>; type ChangingChildrenState = {| alternateChildren: boolean, |}; class AnimatedMaskExample extends React.Component { _maskRotateAnimatedValue = new Animated.Value(0); _maskScaleAnimatedValue = new Animated.Value(1); componentDidMount() { Animated.loop( Animated.sequence([ Animated.timing(this._maskScaleAnimatedValue, { toValue: 1.3, timing: 750, useNativeDriver: true, }), Animated.timing(this._maskScaleAnimatedValue, { toValue: 1, timing: 750, useNativeDriver: true, }), ]), ).start(); Animated.loop( Animated.timing(this._maskRotateAnimatedValue, { toValue: 360, timing: 2000, useNativeDriver: true, }), ).start(); } render() { return ( Basic Mask }> ); } } class ChangingChildrenMaskExample extends React.Component< Props, ChangingChildrenState, > { state = { alternateChildren: true, }; componentDidMount() { setInterval(() => { this.setState(state => ({ alternateChildren: !state.alternateChildren, })); }, 1000); } render() { return ( Basic Mask }> {this.state.alternateChildren ? [ , , ] : null} ); } } const styles = StyleSheet.create({ exampleWrapperStyle: { width: 340, height: 300, alignSelf: 'center', }, imageStyle: { height: 200, width: 200, }, maskContainerStyle: { flex: 1, backgroundColor: 'transparent', justifyContent: 'center', alignItems: 'center', }, maskTextStyle: { backgroundColor: 'transparent', fontSize: 40, fontWeight: 'bold', }, blueStyle: { flex: 1, backgroundColor: 'blue', }, redStyle: { flex: 1, backgroundColor: 'red', }, grayStyle: { backgroundColor: '#eeeeee', }, flexStyle: { flex: 1, }, }); exports.title = ''; exports.description = 'Renders the child view with a mask specified in the `renderMask` prop.'; exports.examples = [ { title: 'Basic Mask', render: function(): React.Element { return ( Basic Mask }> ); }, }, { title: 'Image Mask', render: function(): React.Element { return ( }> ); }, }, { title: 'Animated Mask', render: function(): React.Element { return ; }, }, { title: 'Mask w/ Changing Children', render: function(): React.Element { return ; }, }, ];