使用React Native动画构建车速表-程序员宅基地

技术标签: python  

Animation in mobile app enhances the user experience. It provides a perfect visual hint and makes it appealing to the user.

移动应用中的动画可增强用户体验。 它提供了完美的视觉提示,并吸引了用户。

In this post, we will learn how to implement a speedometer animation using React Native Animated API. We will make use of interpolator and rotate animation.

在本文中,我们将学习如何使用React Native Animated API实现车速表动画。 我们将使用插值器并旋转动画。

Ground Rules

基本规则

Before we begin, let us understand the basic rules that we need to follow while using interpolation. If you are already aware of these, feel free to skip to the next section

在开始之前,让我们了解使用插值时需要遵循的基本规则。 如果您已经知道这些,请随时跳到下一部分

  • The values in inputRange need not necessarily start at 0. inputRange: [-1 0 , 1] is an valid range.

    inputRange中的值不一定必须从0开始。inputRange:[-1 0,1]是有效范围。
  • The values in the inputRange always are in increasing order. Otherwise, you will get an error as “Invariant Violation: Input Range must be monotonically non-decreasing

    inputRange中的值始终按升序排列。 否则,您将收到错误消息“ Invariant Violation:输入范围必须单调非递减

  • Values in outputRange can be in any order unlike values in inputRange. But inputRange and outputRange must be of the same length. Following is the snippet from “react-native” Animated API that validates the same.

    与inputRange中的值不同,outputRange中的值可以采用任何顺序。 但是inputRange和outputRange必须具有相同的长度。 以下是“ react-native” Animated API的代码片段,用于验证相同内容。
  • While interpolating colors, the values must be in RGB/A or HSL color. Hex is not supported. So if you want to animate a color you’ll need to convert your hex to one of the formats interpolation allows.

    插值颜色时,值必须为RGB / A或HSL颜色。 不支持十六进制。 因此,如果要设置颜色的动画,则需要将十六进制转换为插值允许的格式之一。

Interpolation

插补

As per docs, an interpolation maps input ranges to output ranges, typically using a linear interpolation but also supports easing functions.

根据文档,插值通常使用线性插值将输入范围映射到输出范围,但还支持缓动功能。

The inputRange looks at the Animated.Value(val) and then determines how it should be interpreted to the output range.Here are the inputRange and outputRange we will be using

inputRange会查看Animated.Value(val)并确定如何将其解释为输出范围,这是我们将要使用的inputRange和outputRange

inputRange  : [ -3, -2, -1, 1, 2, 3]  
outputRange : ['-100deg','-60deg','-20deg', '20deg', '60deg', '100deg']

For every value in inputRange there should be an equivalent value in outputRange.

对于inputRange中的每个值,在outputRange中应该有一个等效值。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
nput Value and its equivalent output value 输入值及其等效输出值

Interpolation estimates unknown values that fall between known values which we pass as an inputRange.

插值法估计的未知值落在我们作为输入范围传递的已知值之间。

Let say if we start our animation with value 0 even if it does not exist in the inputRange that we have provided, interpolation algorithm will use the known values from inputRange and calculate the rotation angle at which out Indicator svg should be at, (0 deg) as shown below:

假设如果我们从提供的inputRange中不存在值0开始动画,则插值算法将使用inputRange中的已知值并计算指标svg应位于的旋转角度(0度) 如下所示:

Image for post

SVGWe will be using two SVG images, one for “Speedometer” and the other one as “Indicator” on which we will perform rotate animations. Since the “Indicator” SVG we are using is upright 90deg, our initial angle is negative(-ve). The SVG you are using will determine the interpolation rotation angles.

SVG我们将使用两张SVG图像,一个用于“ Speedometer”,另一个用于“ Indicator”,我们将在该图像上执行旋转动画。 由于我们使用的“指示器” SVG为直角90度,因此我们的初始角度为负(-ve)。 您使用的SVG将确定插值旋转角度。

SVG in React Native React Native doesn’t support SVG out of the box. We will use react-native-svg which provides SVG support on React Native. To use SVG images as any other UI components like Button, Text, etc, we will use SVGR tool.

SVG在阵营本地阵营本地不支持SVG开箱。 我们将使用react-native-svg在React Native上提供SVG支持。 要将SVG图像用作按钮,文本等其他UI组件,我们将使用SVGR工具。

CodeWe initialized Animated.Value() with -3, this means the initial rotation angle at which our “Indicator” is placed will be -100deg and it will be our starting position.

代码我们使用-3初始化了Animated.Value(),这意味着放置“指示器”的初始旋转角度为-100度,这是我们的起始位置。

state = { value : new Animated.Value(-3)};

Interpolation will start with the initial value provided above

插值将从上面提供的初始值开始

const animInterpolation = this.state.value.interpolate({       inputRange : [ -3, -2, -1, 1, 2, 3],    
outputRange: ['-100deg','-60deg','-20deg', '20deg', '60deg', '100deg']});

Pass the interpolation to rotate

通过插值旋转

<Animated.View style={
        {
        transform:[{
        rotate:animInterpolation}],position:"absolute", top:40, }}>
<Indicator/>
</Animated.View>

Along with this, I am also interpolating the background colors of a container view. This is totally optional

与此同时,我也在插入容器视图的背景色。 这是完全可选的

const colorInterpolation = this.state.value.interpolate({       inputRange: [ -3, -2, -1, 1, 2, 3],   outputRange : ["rgba(255,255,255, 0.9)", "rgba(68, 196, 161, 1)", "rgba(228, 233, 237, 1)", "rgba(52, 152, 219, 1)","rgba(250, 216,   89, 1)", "rgba(192, 57, 43, 1)"]
});

Setting the interpolation on backgroundColor of the container view.

在容器视图的backgroundColor上设置插值。

<Animated.View style={[{ backgroundColor:colorInterpolation}, {width:"100%", height:"100%",justifyContent:"center", alignItems:"center"}]}>

Final Result

最后结果

Image for post

Github Project

Github项目

翻译自: https://medium.com/@pallavi.mp88/speedometer-react-native-animation-7e5c5e22792b

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_26638123/article/details/108170698

智能推荐

874计算机科学基础综合,2018年四川大学874计算机科学专业基础综合之计算机操作系统考研仿真模拟五套题...-程序员宅基地

文章浏览阅读1.1k次。一、选择题1. 串行接口是指( )。A. 接口与系统总线之间串行传送,接口与I/0设备之间串行传送B. 接口与系统总线之间串行传送,接口与1/0设备之间并行传送C. 接口与系统总线之间并行传送,接口与I/0设备之间串行传送D. 接口与系统总线之间并行传送,接口与I/0设备之间并行传送【答案】C2. 最容易造成很多小碎片的可变分区分配算法是( )。A. 首次适应算法B. 最佳适应算法..._874 计算机科学专业基础综合题型

XShell连接失败:Could not connect to '192.168.191.128' (port 22): Connection failed._could not connect to '192.168.17.128' (port 22): c-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏15次。连接xshell失败,报错如下图,怎么解决呢。1、通过ps -e|grep ssh命令判断是否安装ssh服务2、如果只有客户端安装了,服务器没有安装,则需要安装ssh服务器,命令:apt-get install openssh-server3、安装成功之后,启动ssh服务,命令:/etc/init.d/ssh start4、通过ps -e|grep ssh命令再次判断是否正确启动..._could not connect to '192.168.17.128' (port 22): connection failed.

杰理之KeyPage【篇】_杰理 空白芯片 烧入key文件-程序员宅基地

文章浏览阅读209次。00000000_杰理 空白芯片 烧入key文件

一文读懂ChatGPT,满足你对chatGPT的好奇心_引发对chatgpt兴趣的表述-程序员宅基地

文章浏览阅读475次。2023年初,“ChatGPT”一词在社交媒体上引起了热议,人们纷纷探讨它的本质和对社会的影响。就连央视新闻也对此进行了报道。作为新传专业的前沿人士,我们当然不能忽视这一热点。本文将全面解析ChatGPT,打开“技术黑箱”,探讨它对新闻与传播领域的影响。_引发对chatgpt兴趣的表述

中文字符频率统计python_用Python数据分析方法进行汉字声调频率统计分析-程序员宅基地

文章浏览阅读259次。用Python数据分析方法进行汉字声调频率统计分析木合塔尔·沙地克;布合力齐姑丽·瓦斯力【期刊名称】《电脑知识与技术》【年(卷),期】2017(013)035【摘要】该文首先用Python程序,自动获取基本汉字字符集中的所有汉字,然后用汉字拼音转换工具pypinyin把所有汉字转换成拼音,最后根据所有汉字的拼音声调,统计并可视化拼音声调的占比.【总页数】2页(13-14)【关键词】数据分析;数据可..._汉字声调频率统计

linux输出信息调试信息重定向-程序员宅基地

文章浏览阅读64次。最近在做一个android系统移植的项目,所使用的开发板com1是调试串口,就是说会有uboot和kernel的调试信息打印在com1上(ttySAC0)。因为后期要使用ttySAC0作为上层应用通信串口,所以要把所有的调试信息都给去掉。参考网上的几篇文章,自己做了如下修改,终于把调试信息重定向到ttySAC1上了,在这做下记录。参考文章有:http://blog.csdn.net/longt..._嵌入式rootfs 输出重定向到/dev/console

随便推点

uniapp 引入iconfont图标库彩色symbol教程_uniapp symbol图标-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏12次。1,先去iconfont登录,然后选择图标加入购物车 2,点击又上角车车添加进入项目我的项目中就会出现选择的图标 3,点击下载至本地,然后解压文件夹,然后切换到uniapp打开终端运行注:要保证自己电脑有安装node(没有安装node可以去官网下载Node.js 中文网)npm i -g iconfont-tools(mac用户失败的话在前面加个sudo,password就是自己的开机密码吧)4,终端切换到上面解压的文件夹里面,运行iconfont-tools 这些可以默认也可以自己命名(我是自己命名的_uniapp symbol图标

C、C++ 对于char*和char[]的理解_c++ char*-程序员宅基地

文章浏览阅读1.2w次,点赞25次,收藏192次。char*和char[]都是指针,指向第一个字符所在的地址,但char*是常量的指针,char[]是指针的常量_c++ char*

Sublime Text2 使用教程-程序员宅基地

文章浏览阅读930次。代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大、灵活的编辑器,相信你和我一样,都不会例外。我用过的编辑器不少,真不少~ 但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说“神器”是我能给予一款软件最高的评价,那么我很乐意为它封上这么一个称号。它小巧绿色且速度非

对10个整数进行按照从小到大的顺序排序用选择法和冒泡排序_对十个数进行大小排序java-程序员宅基地

文章浏览阅读4.1k次。一、选择法这是每一个数出来跟后面所有的进行比较。2.冒泡排序法,是两个相邻的进行对比。_对十个数进行大小排序java

物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)_网络调试助手连接阿里云连不上-程序员宅基地

文章浏览阅读2.9k次。物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)其实作者本意是使用4G模块来实现与阿里云物联网平台的连接过程,但是由于自己用的4G模块自身的限制,使得阿里云连接总是无法建立,已经联系客服返厂检修了,于是我在此使用网络调试助手来演示如何与阿里云物联网平台建立连接。一.准备工作1.MQTT协议说明文档(3.1.1版本)2.网络调试助手(可使用域名与服务器建立连接)PS:与阿里云建立连解释,最好使用域名来完成连接过程,而不是使用IP号。这里我跟阿里云的售后工程师咨询过,表示对应_网络调试助手连接阿里云连不上

<<<零基础C++速成>>>_无c语言基础c++期末速成-程序员宅基地

文章浏览阅读544次,点赞5次,收藏6次。运算符与表达式任何高级程序设计语言中,表达式都是最基本的组成部分,可以说C++中的大部分语句都是由表达式构成的。_无c语言基础c++期末速成