使用React Native构建类似Tinder的加载器

简介:

在这篇文章中我会尝试描述在React Native中构建一个类似Tinder的加载器所遇到的调整我把它分成三个挑战。

挑战1:布局

在上面的截图中,你可以看到头像和它后面的圆,都在屏幕正中间。 感谢 Flexbox,通过添加"justifyContent:'center'"和"alignItems:'center'",可以轻松地将元素水平和垂直居中。在这种情况下,我不得不居中两个元素。我可以使用 Flexbox 作为头像或圆圈。我选择了头像。对于背景圆我使用"position:absolute"和负边距来完成我的目标。

 
 
  1. container: { 
  2.   flex: 1, 
  3.   justifyContent: 'center', // this centers the avatar vertically 
  4.   alignItems: 'center', // this centers the avatar horizontally 
  5. }, 
  6. circle: { 
  7.   width: circleSize, 
  8.   height: circleSize, 
  9.   position: 'absolute'
  10.   left: deviceWidth/2, 
  11.   top: deviceHeight/2, 
  12.   marginLeft: -circleSize/2, 
  13.   marginTop: -circleSize/2 

挑战2:动画

React Native有一个动画库,称为Animated。我用它来放大圆圈并将其淡出。如果你知道如何使用 interpolate 方法,并在一个循环重复动画,圆圈的动画就可以解决了。

我知道,"react-native-animatable"库提供了一个名为"iterationCount:infinitive"的属性,但是Animated API没有内置这样的功能。所以我不得不自己构建它。

我的第一个想法是递归。我创建了一个新的函数,它设置动画值为零,然后在回调中把值扩展到1,当动画完成后,我再次调用该函数。

 
 
  1. animate() { 
  2.   this.anim.setValue(0); 
  3.   Animated.timing(this.anim, { 
  4.     toValue: 1, 
  5.     duration: 3000, 
  6.     easing: Easing.in 
  7.   }) 
  8.   .start(this.animate.bind(this)); 
  9. }  

虽然它可以工作,并且代码看起来挺干净,但它有一个问题:我不能停止动画,它会不停的重复。 我最终使用 setInverval 和 clearInterval 来创建了一个能够被停止的循环。

挑战3:交互

最后的挑战是与头像的交互。每次你点击它,一个新的圆圈会出现,而不会干扰前一个。这意味着,屏幕上可能同时有多个圆圈。我很快意识到,当前的代码无法运作。 所以我创建了第二个组件,它代表一个单一的圆。每个圆圈都有自己的"动画生命周期"。我仍然使用setInterval,但现在它创建一个新的圆圈,而不是管理动画。当您按下头像时,会创建另一个圆圈。

 
 
  1. setCircleInterval() { 
  2.   this.interval = setInterval(this.addCircle, 3000); 
  3.   this.addCircle(); 
  4. addCircle() { 
  5.   this.setState({ 
  6.     circles: [...this.state.circles, this.counter] 
  7.   }); 
  8.    
  9.   this.counter++; 
  10. }  

有一件事仍然未处理。只要用户按下不动,新头像就不再会被创建,直到在他释放屏幕之后才创建新的圆圈。 幸运的是,Touchable 组件有两个事件,它们有助于处理这件事情:onPressIn 和 onPressOut。当第一个事件被调用时,间隔被清除,因此不会创建任何新的圆,当第二个事件被触发时,将再次设置间隔(会再创建圆圈)。

 
 
  1. onAvatarPressIn() { 
  2.   clearInterval(this.interval); 
  3. onAvatarPressOut() { 
  4.   this.setCircleInterval(); 
  5. }  

结论

这个练习花了一些时间,我对结果很满意。在 React Native 中创建 UI 非常有趣,我期待着从 React Native 中的流行应用程序构建其他组件。如果您有任何想法或愿望,请让我知道!

请查看Github上的完整代码

谢谢阅读!


作者:力谱宿云

来源:51CTO

目录
打赏
0
0
0
0
16485
分享
相关文章
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
93 2
从零开始构建你的第一个React应用
从零开始构建你的第一个React应用
64 2
构建高效的数据可视化仪表板:D3.js与React的融合之道
【10月更文挑战第25天】在数据驱动的时代,将复杂的数据集转换为直观、互动式的可视化表示已成为一项至关重要的技能。本文深入探讨了如何结合D3.js的强大可视化功能和React框架的响应式特性来构建高效、动态的数据可视化仪表板。文章首先介绍了D3.js和React的基础知识,然后通过一个实际的项目案例,详细阐述了如何将两者结合使用,并提供了实用的代码示例。无论你是数据科学家、前端开发者还是可视化爱好者,这篇文章都将为你提供宝贵的洞见和实用技能。
160 5
React Native实战:构建跨平台移动应用
React Native实战:构建跨平台移动应用
95 0
从零开始构建你的第一个React应用
从零开始构建你的第一个React应用
45 0
从零构建你的第一个React应用
从零构建你的第一个React应用
45 0
构建现代Web应用:使用React框架打造单页面应用
【10月更文挑战第9天】构建现代Web应用:使用React框架打造单页面应用
下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等