react-navigation-selective-tab-bar
Version:
Creates a custom TabBar where you can decide which routes to display
70 lines (64 loc) • 1.7 kB
JavaScript
/* @flow */
import React from 'react';
import { Animated, View, StyleSheet } from 'react-native';
type Props = {
route: any,
horizontal?: boolean,
activeOpacity: any,
inactiveOpacity: any,
activeTintColor: any,
inactiveTintColor: any,
renderIcon: any,
style: any,
};
export default class TabBarIcon extends React.Component<Props> {
render() {
const {
route,
activeOpacity,
inactiveOpacity,
activeTintColor,
inactiveTintColor,
renderIcon,
horizontal,
style,
} = this.props;
// We render the icon twice at the same position on top of each other:
// active and inactive one, so we can fade between them.
return (
<View style={style}>
<Animated.View style={[styles.icon, { opacity: activeOpacity }]}>
{renderIcon({
route,
focused: true,
horizontal,
tintColor: activeTintColor,
})}
</Animated.View>
<Animated.View style={[styles.icon, { opacity: inactiveOpacity }]}>
{renderIcon({
route,
focused: false,
horizontal,
tintColor: inactiveTintColor,
})}
</Animated.View>
</View>
);
}
}
const styles = StyleSheet.create({
icon: {
// We render the icon twice at the same position on top of each other:
// active and inactive one, so we can fade between them:
// Cover the whole iconContainer:
position: 'absolute',
alignSelf: 'center',
alignItems: 'center',
justifyContent: 'center',
height: '100%',
width: '100%',
// Workaround for react-native >= 0.54 layout bug
minWidth: 25,
},
});