热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ReactNative:运用AnimtedAPI完成向上转动时隐蔽Header组件

想先引荐一下近期在写的一个ReactNative项目,名字叫Gakki:是一个Mastodon的第三方客户端(AndroidApp)预览写在前面原本我也不想造这个轮子的,怎样没找到

想先引荐一下近期在写的一个React Native项目,名字叫
Gakki :是一个
Mastodon的第三方客户端 (Android App)

预览

《ReactNative: 运用Animted API完成向上转动时隐蔽Header组件》

写在前面

原本我也不想造这个轮子的,怎样没找到适宜的组件。只能本身上了~

思绪很清晰: 监听转动事宜,动态修正Header组件和Content组件的top值(固然,他们默许都是position:relative)。

接下来完成的时刻遇到了题目,我第一个版本是经由过程动态设置state来完成,即:

/**
* 每次转动时,从新设置headerTop的值
*/
OnScroll= event =>{
const y = event.nativeEvent.contentOffset.y
if (y >= 270) return
// headerTop等于Header和Content的top款式对应的值
this.setState({
headerTop: y
})
}

如许虽然能完成,然则结果不好:显著能够看到在上滑的过程当中,Header组件一卡一卡地向上方挪动(一点都不流通)。

由于就只能另寻他法了:动画

React Native 供应了两个互补的动画体系:用于建立邃密的交互掌握的动画
Animated和用于全局的规划动画
LayoutAnimation (笔者注:此次没有用到它)

Animated 相干API引见

起首,这儿有一个简朴“逐步显现”动画的DEMO,须要你先看完(文档很简朴清楚明了且解释清晰,没必要Copy过来)。

在看懂了DEMO的基础上,我们还须要相识两个症结的API才完成完全的结果:

1. interpolate

插值函数。用来对差别范例的数值做映照处置惩罚。

固然,这是文档申明:

Each property can be run through an interpolation first. An interpolation maps input ranges to output ranges, typically using a linear interpolation but also supports easing functions. By default, it will extrapolate the curve beyond the ranges given, but you can also have it clamp the output value.

翻译:

每一个属性能够先经由插值处置惩罚。插值对输入局限和输出局限之间做一个映照,平常运用线性插值,但也支撑紧张函数。默许情况下,假如给定数据超出局限,他也能够自行推断出关于的曲线,但您也能够让它箝位输出值(P.S. 末了一句能够翻译毛病,由于没搞懂clamp value指的是什么, sigh…)

举个例子:

在完成一个图片扭转动画时,输入值只能是如许的:

this.state = {
rotate: new Animated.Value(0) // 初始化用到的动画变量
}
...
// 这么映照是由于style款式须要的是0deg如许的值,你给它0如许的值,它可不能平常事情。由于一定须要一个映照处置惩罚。
this.state.rotate.interpolate({ // 将0映照成0deg,1映照成360deg。固然中心的数据也是云云映照。
inputRange: [0, 1],
outputRange: ['0deg', '360deg']
})

2. Animated.event

平常动画的输入值都是默许设定好的,比方前面DEMO中的逐步显现动画中的透明度:最先是0,末了是1。这是已写死了的。

但假如有些动画结果须要的不是写死的值,而是动态输入的呢,比方:手势(上滑、下滑,左滑,右滑…)、别的事宜。

那就用到了Animated.event

直接看一个将转动事宜的y值(转动条间隔顶部高度)和我们的动画变量绑定起来的例子:

// 这段代码示意:在转动事宜触发时,将event.nativeEvent.contentOffset.y 的值动态绑定到this.state.headerTop上
// 和最前面我经由过程this.setState动态设置的目标一样,但交给Animated.event做就不会形成视觉上的卡顿了。
OnScroll={Animated.event([
{
nativeEvent: {
contentOffset: { y: this.state.headerTop }
}
}
])}

关于API更多的申明请移步文档

完全代码

import React, { Component } from 'react'
import { StyleSheet, Text, View, Animated, FlatList } from 'react-native'
class List extends Component {
render() {
// 模仿列表数据
const mockData = [
'强盛',
'民主',
'文化',
'调和',
'自在',
'同等',
'公平',
'法治',
'爱国',
'敬业',
'诚信',
'和睦'
]
return (
OnScroll={this.props.onScroll}
data={mockData}
renderItem={({ item }) => (
marginBottom: 1,
alignItems: 'center',
justifyContent: 'center',
color: 'white'
},
header: {
height: 50,
backgroundColor: '#3F51B5',
alignItems: 'center',
justifyContent: 'center'
},
text: {
color: 'white'
}
})

推荐阅读
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
狮子座YAO
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有