在这篇文章中我会尝试描述在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
  14. }

挑战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. }
  5. addCircle() {
  6. this.setState({
  7. circles: [...this.state.circles, this.counter]
  8. });
  9. this.counter++;
  10. }

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

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

结论

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

请查看Github上的完整代码。

谢谢阅读!

作者:力谱宿云

来源:51CTO

使用React Native构建类似Tinder的加载器相关推荐

  1. Activity中加载器的总结

    继续总结加载器 加载器可以支持在Activity或片段中异步加载数据,加载器具有以下特征: 可用于每个Activity和Fragment: 支持异步加载数据: 监控其数据源并在内容变化时传递新结果: ...

  2. Android Loader(加载器)详解

    Loader(加载器)简介 Android 3.0 中引入了加载器,支持轻松在 Activity 或Fragment中异步加载数据. 加载器具有以下特征: (1)可用于每个 Activity 和 Fr ...

  3. Android 之Loader(加载器)

    介绍 Android 3.0 中引入了加载器,支持轻松在 Activity 或片段中异步加载数据. 加载器具有以下特征: 可用于每个 Activity 和 Fragment. 支持异步加载数据. 监控 ...

  4. 如何在React Native中创建精美的动画加载器

    by Vikrant Negi 通过Vikrant Negi 如何在React Native中创建精美的动画加载器 (How to create a beautifully animated load ...

  5. 如何使用React Native构建新闻应用

    by Mohammed Salman 穆罕默德·萨尔曼(Mohammed Salman) 如何使用React Native构建新闻应用 (How to build a news app with Re ...

  6. [RN] React Native 实现 类似京东 的 沉浸式状态栏和搜索栏

    React Native 实现 类似京东 的 沉浸式状态栏和搜索栏 其原理其实就是在要 隐藏 部分的那个View 前面加入 StatusBar 代码! 代码如下: <StatusBaranima ...

  7. 如何使用React Native构建嵌套的抽屉菜单

    by Dhruvdutt Jadhav 由Dhruvdutt Jadhav 如何使用React Native构建嵌套的抽屉菜单 (How to build a nested drawer menu w ...

  8. android 加载静态网页,React Native:如何在WebView内加载SPA或本地静态HTML页面?

    React Native:如何在WebView内加载SPA或本地静态HTML页面? React Native WebView允许你使用uri属性加载可公开访问的资源,就像程序内的一个浏览器.但是,当你 ...

  9. 深度学习-Pytorch:项目标准流程【构建、保存、加载神经网络模型;数据集构建器Dataset、数据加载器DataLoader(线性回归案例、手写数字识别案例)】

    1.拿到文本,分词,清晰数据(去掉停用词语): 2.建立word2index.index2word表 3.准备好预训练好的word embedding 4.做好DataSet / Dataloader ...

最新文章

  1. div 隐藏_注入WordPress网站的隐藏垃圾邮件链接
  2. paper reference
  3. Java学习笔记一和前言
  4. You must supply a resourceID for a TextView
  5. React系列——React Fiber 架构介绍资料汇总(翻译+中文资料)
  6. Proxmark3 Easy Gui 4.0 5.0 5.1加强版免费获取啦
  7. js获取某节点的特定父节点
  8. echart中线性渐变的应用
  9. 华硕win10键盘失灵_华硕笔记本键盘失灵怎么办win10(Win10的键盘失灵解决办法)...
  10. 2021年还能用的13款完全免费的Office插件整理(含功能详细介绍)
  11. 深入理解LSTM神经网络
  12. SEM和SEO的区别?
  13. 用java 把字符串写进文本,Java将字符串写入文本文件代码示例
  14. Oracle VM VirtualBox 打开Ubuntu出现0x00000000指令引用的0x00000000内存,该内存不能为written的解决方案
  15. java 存储空间不足 无法处理此命令_Java开发网 - java.io.IOException: 存储空间不足,无法处理此命令。...
  16. U-net复现pytorch版本 以及制作自己的数据集并训练
  17. ITIL4认证测试题及答案(收藏学习)
  18. html软键盘挤压布局,软键盘挤压布局问题
  19. Linux下学习DB2命令的笔记
  20. 腾讯公司移动互联网的运营与营销

热门文章

  1. android中使用SurfaceView做视频播放器--视频切换无缝连接
  2. 车联网 - 手机连接汽车 mirrorlink,carplay,android auto,carlife
  3. 大整数乘法---C语言实现
  4. Python拾珍:用这些功能写出更简洁、更可读或更高效的代码
  5. Zynq 器件搭建多核系统
  6. 求小蚁摄像头YHS-113 CMIIT刷机包?7-26
  7. 软件设计原则:高内聚低耦合
  8. Ubuntu和Windows10双系统下Ubuntu连不上网的解决
  9. 电力电子变流器和永磁同步电机模型预测控制方式实现
  10. 2021年毕业论文选题计算机,计算机与人工智能学院关于2021届本科毕业设计(论文)工作实施方案-计算机与人工智能学院...