screens/FeedsScreen.js - FloatingWriteButton

    <FloatingWriteButton hidden={hidden} />

    components/FloatingWriteButton.js

    import {useNavigation} from '@react-navigation/native';
    import React, {useEffect, useRef} from 'react';
    import {Platform, Pressable, StyleSheet, Animated} from 'react-native';
    import Icon from 'react-native-vector-icons/MaterialIcons';
    
    function FloatingWriteButton({hidden}) {
      const navigation = useNavigation();
    
      const onPress = () => {
        navigation.navigate('Write');
      };
    
      const animation = useRef(new Animated.Value(0)).current;
    
      useEffect(() => {
        Animated.timing(animation, {
          toValue: hidden ? 1 : 0,
          useNativeDriver: true,
        }).start();
      }, [animation, hidden]);
    
      return (
        <Animated.View
          style={[
            styles.wrapper,
            {
              transform: [
                {
                  translateY: animation.interpolate({
                    inputRange: [0, 1],
                    outputRange: [0, 88],
                  }),
                },
              ],
              opacity: animation.interpolate({
                inputRange: [0, 1],
                outputRange: [1, 0],
              }),
            },
          ]}>
          <Pressable
            style={({pressed}) => [
              styles.button,
              Platform.OS === 'ios' && {
                opacity: pressed ? 0.6 : 1,
              },
            ]}
            android_ripple={{color: 'white'}}
            onPress={onPress}>
            <Icon name="add" size={24} style={styles.icon} />
          </Pressable>
        </Animated.View>
      );
    }
    
    (...)
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.