内容简介:最近做项目时需要实现一个渐变色的背景,真正实现时才发现要比我想象中花费的时间要多。求大佬们点个关注,会定期写原创和翻译国外最新文章,跟大佬们一起学习进步,有问题或者建议欢迎加微信ruiwendelll,拉大家进技术交流群,一起探讨学习,谢谢了!原文地址 这里是
最近做项目时需要实现一个渐变色的背景,真正实现时才发现要比我想象中花费的时间要多。
求大佬们点个关注,会定期写原创和翻译国外最新文章,跟大佬们一起学习进步,有问题或者建议欢迎加微信ruiwendelll,拉大家进技术交流群,一起探讨学习,谢谢了!
原文地址 这里是 源码
天真的尝试
要在React Native中显示渐变,人们使用 react-native-linear-gradient 项目。我想看看是否有人试过动态地改变颜色,我找到了 Animated Gradient Transition 这个项目。仔细查看代码,我的反应是这张的:
我不明白为什么它需要两个类,为什么有这么多的代码。我不想花太多时间去理解它了。我觉得我自己的思路就能简单地解决这个问题:
- 使用
Animate.createAnimatedComponent
创建一个AnimatedLinearGradient
组件 - 插入某些颜色并传递给
AnimatedLinearGradient
很简单吧? 这里 是源码(会崩溃)。我使用它做了一个demo,然后就得到了error:
JSON value <null>
of type NSNull cannot be converted to a UIColor. Did you forget to call processColor() on the JS side?
我求助了twttier,动画不能使用arrays。尽管我觉得我做了正确的事。动画库不会处理任何数组类型的值,所以底层的native组件不会得到动态的颜色。
这就是之前的代码如此庞大的原因。
正确构建
知道了动态化的限制。我们修改一下思路让程序更健壮吧。
- 我需要主控件
AnimatedGradient
像LinearGradient
那样工作。它接收color类型的数组 - 在改变colors数组的时候。我们想要一个动画效果。为了实现这个,
AnimatedGradient
需要保持对之前colors数组的追踪。 - 因为我们不能使用arrays来改变值,我们要建立一个
GradientHelper
来独立地接收颜色数组。然后在Animated.createAnimatedComponent
中调用它。GradientHelper
会通过react-native-linear-gradient
包把array中的值传给LinearGradient
控件。
为了便于理解,我们假设两种颜色。
AnimatedGradient component
首先,创建一个 AnimatedGradientHelper
在AnimatedGradient的构造函数中,我们将以跟踪以前的颜色初始化prevColors状态字段。我们还初始化了一个名为tweener的Animated.Value。
在getDerivedStateFromProps中,我们获取state.colors值并保持在state.prevColors中。我们设置了新的state.colors,我们重置了tweener。
在componentWillUpdate(也就是当参数改变时),我们将使tweener从0移动到1。
在render方法中,我们使用tweener,prevColors和colors来创建两个颜色插值,并将它们分别传递给AnimatedGradientHelper。
Gradient Helper
在GradientHelper中,我们所做的就是获取color1和color2参数,将它们放入一个数组中,并将其传递给LinearGradient。我们这样做是因为我们需要绕过Animated的限制。
下面是demo;
现在我们知道为什么原始的代码如此之大。它必须做所有这些,并处理超过2种颜色的渐变。
如何动态改变
我们可以增加额外一步为其他属性添加动画。LinearGradient组件允许您指定渐变开始和结束的坐标。为什么不插入那些呢?这是一个更新的渲染方法。您可以猜测组件的其余部分发生了什么。 源码
我们只需要通过做一些道具来调整我们的GradientHelper。 代码
我们就得到了一个更酷的demo:
所以我们知道了如何在RN中实现动态渐变,和一点点动画效果。
以上所述就是小编给大家介绍的《【译】React Native中的动画渐变》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- iOS WHGradientHelper(线性、径向渐变;渐变动画;Lable字体渐变及动画)
- 边框攻略:纯CSS渐变虚框、边框滚动动画
- iOS个人中心渐变动画、微信对话框、标签选择器、自定义导航栏、短信验证输入框等源码
- Flutter 中渐变的高级用法
- 沉浸式渐变图片轮播器
- CSS3 渐变(Gradients)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithm Analysis in Java
Mark A. Weiss / Pearson / 2006-3-3 / USD 143.00
As the speed and power of computers increases, so does the need for effective programming and algorithm analysis. By approaching these skills in tandem, Mark Allen Weiss teaches readers to develop wel......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!