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

结束语

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

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