React Native 盾牌形进度条

前序

因项目需求需要使用React-native封装一个特殊形状的进度条。网上大神封装好的进度条都是圆形或者长条的进度条,所以只能自己仿照着封装一个。

效果图

QQ20180906-160914@2x.png

react-native-svg

SVG用于描述二维矢量图形的一种图形格式。
react-native-svg提供一个SVG接口,以便在iOS和Android上运行。
常用的类如下表:

类型 描述
SVG 承载绘图区域
Circle
G 包裹块
LinearGradient 线性渐变
RadialGradient 角度渐变
Line 线条
Polyline 多段线
Path 路径
Polygon 多边形
Rect 矩形
Text 文本信息
TextPath 文本路径
Stop 效果停止位置
Defs 定义引用元素

常用属性如下表:

类型 描述
fill 填充颜色
fillOpacity 填充透明度
fillRule 填充规则
stroke 外边框属性,可以定义颜色
strokeWidth 外边框宽度
strokeOpacity 外边框透明度
strokeLinecap 路径结束位置的形状
strokeLinejoin 元素的顶点处使用的联接类型
strokeDasharray 用于创建虚线
strokeDashoffset 虚线的偏移量
rotate 旋转角度
scale 比例
x,y,cx,cy等 表示坐标

进度条的实现

Path的获取

使用SVG可以绘制出任意形状的图形,关键是要获取到想要绘制图形的路径(Path)。越复杂的图形其Path越长,所以遇到复杂图形的时候还是放弃自己计算Path吧。我们可以让视觉设计师将绘制出来的图形导出其SVG文件,从该SVG文件中我们可以获取到想要的Path。
设计师导出的部分SVG文件如下(从该SVG文件中,我们可以获取到Path和LinearGradient值):


QQ20180906-162005@2x.png

Path的组合

这次的盾牌进度条其实是由3个模块组合而成的,一个是外圈的阴影,另一个是中间固定颜色的路径,最后一个是根据进度条的数值绘制出来的路径。其中后面两个Path是重合的关系,所以两者的路径是相同的。

最后根据设计师提供的SVG文件组合出一个完整的图形。


QQ20180906-165102@2x.png

最外层进度条的控制

根据react-native-svg提供的属性中我们将会使用到strokeDasharray属性来控制进度条的变化。从上面导出的SVG文件图片我们可以看到Stroke-dasharray这个属性。后面的1256为虚线的值,前面335为实线的值,我们只需要控制前面一个值得变化就可以实现进度条的效果了。


QQ20180906-165011@2x.png

暴露出相应的属性

属性 描述
style 样式
fill 进度值
rate 动画执行时间(代表着速度的意思)
onAnimationComplete 动画结束后回调函数
gradientStartColor 渐变开始颜色
gradientEndColor 渐变结束颜色
startTransparent 起始透明度
endTransparent 终止透明度
dashOffset 进图条填充一圈的偏移量(实线)
children 内部视图
progressWidth 进度条宽度
innerPath 内圈路径
path 外圈路径

进度条动画

在该进度条View上层再封装一层动画View,内部使用Animated控制着fill值的变化,这样就可以实现进度条的动画。
QQ20180906-170051@2x.png

结束语

本篇只是阐述了实现该进度条的大致思路,很多的细节方面阐述的还不是很清楚,欢迎留言交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,821评论 25 709
  • 【20180601】儿童节 今天又是一年一度的儿童节,度过了昨天的忙碌的一天,现在又会忆起自己的小时候过六一节的快...
    过云雨Milo阅读 161评论 0 0
  • 作者:及耳 写作是一桩趣事,能与不同时期的灵魂交流。 大学时期回看小学周记,除却稚嫩的笔法,还像打开另一扇你已忘却...
    及耳阅读 327评论 0 1
  • 第11篇个人职场成长小日记之读书笔记1430字 | 7分钟只字不差阅读 沟通—是《好好说话》第二章节的内容,围绕4...
    装睡胖子阅读 338评论 1 0