在React Native中创建一个很棒的页面动画组件的5个技巧
React Native 是Facebook早先于2015年4月开源的跨平台移动 … Read More
xiaoli
React Native 是Facebook早先于2015年4月开源的跨平台移动应用开发框架,是开源的JS框架 React 在原生移动应用平台的衍生产物。
目前支持iOS和安卓两大平台。
RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。
在知力科技,软件技术工程师们也常常需要使用,并在实践中提炼和总结了在React Native中创建一个很棒的页面动画组件的5个技巧,一起来看下。
1:不要使用动画
在react-native中执行动画时,Animated是一个比较的低级API。但是,和所有低级API类似,它有点复杂,并且会产生大量不清晰的代码。
你的大部分动画都可以用LayoutAnimation和react-native- animatable制作。它们是更加高级的API和操作起来也更简单。我强烈建议您使用它们,您可以立即完成大部分任务。
2:为所有动画使用相同的组件
在两个不同的组件或页面上执行同一个变化是很难实现的。你也必须在他们之间复制一些代码。最简单的方法是改变组件某些部分的样式来为其设置动画效果。
页面变化的动画是这种的最大缺点。由于在您的router中不会有两个不同的页面,因此您将丢失后退按钮的处理。
3:使用相对定位
在React Native中没有fixed定位。在ListView中,不能用position: ‘absolute’, top: 0让组件移动到页面的顶部。当组件移动到ListView的顶部时,位置却不在您所滚动的位置。
你可以用measureInWindow来知道你的View在页面中的位置。例如 :
class MyComponent extends Component {
onPress() {
this.props.onPress();
this.refs.container.measureInWindow((x, y) => this.setState({
windowPos: { x, y },
}));
};
render() {
const containerPos = this.state.windowPos ? {
position: ‘relative’,
top: – this.state.windowPos.y + appStyle.navbar.height,
} : {};
return (
<TouchableWithoutFeedback onPress={this.onPress}>
<View style={[styles.container, containerPos]} ref=”container”>
{content}
</View>
</TouchableWithoutFeedback>
);
}
}
4:让父组件知道动画
当你开始执行列表上的一个元素的动画时,ListView需要知道状态的变化。您将不得不淡出所有其他元素并禁用滚动。不要忘记接受父组件onAnimationStart或onPress的回调。
5:处理退出动画
你正在执行的动画可能很棒,但不要忘记正在退出的动画!请注意,如果在退出期间删除多余的元素,则无法在LayoutAnimation之外为其设置动画效果。
在我的示例中,我等待LayoutAnimation的结尾后隐藏了底部文本。由于这个原因,我可以使用react-native-animatable退出动画。
class TvShowListItem extends Component {
componentWillUpdate() {
const animation = LayoutAnimation.create(500, ‘easeInEaseOut’, ‘opacity’);
LayoutAnimation.configureNext(animation, () => this.setState({ exitEnded: true }));
}
onPress() {
if (this.state.opened) {
this.refs.description.fadeOutDownBig();
return this.setState({opened: false, exitEnded: false});
}
this.setState({ opened: true });
};
render() {
const { opened, exitEnded } = this.state;
return (
<TouchableWithoutFeedback onPress={this.onPress}>
<View style={[styles.container, containerPos]} ref=”container” >
{ content }
{ (opened || ! exitEnded) && (
<Animatable.View
animation=”fadeInUpBig”
style={styles.description}
duration={800}
ref=”description”
delay={400}
>
<Text style={styles.descriptionText}>{this.props.tvShow.overview}</Text>
</Animatable.View>
)}
</View>
</TouchableWithoutFeedback>
);
}
}
总结:
以上就是在React-native中如何制作一个很好的组件来展示页面动画的5个技巧,希望与软件工程师们一起讨论,一起成长!
相关文章
“放松与它在视觉中的作用”:这篇1977年完成的博士论文为现代人工智能研究的发展奠定了基础
当人们提到杰弗里·辛顿时,他们通常会想到反向传播算法、玻尔兹曼机、深度信念网络,以及那些彻底改变了人工智能发展的深度学习技术。 然而,很少有人会追溯到他科研生涯的起点。 1977年,在那篇著名的关于反向传播的论文发表之前的近十年时间里,辛顿在爱丁堡大学完成了他的博士论文,题为《松弛机制在视觉认知中的作用》。乍一看,这篇论文似乎只是探讨计算机视觉与松弛算法之间的关系。当我开始阅读它时,我也正是抱着这样的预期。 然而,在仔细研读之后,我意识到这篇论文涉及的远不止视觉算法。许多后来成为辛顿研究核心的理念,在当时就已经初具雏形。虽然当时的术语有所不同,数学表达也更为简单,神经网络也尚未成为他研究的重点
阅读全文
那些被隐藏起来的基础设施建设成本:为什么你的团队不应该再继续承担这些责任了
大多数工程团队最初并不是为了管理基础设施而开始工作的。他们通常是带着某个产品创意 … Read More
阅读全文