ReactNative 繪制漸變折線圖

我們?cè)谧鯧線圖沃饶,或者趨勢(shì)圖的時(shí)候,經(jīng)常會(huì)遇到各種各樣的麻煩翎蹈。這篇文章哲戚,我給大家講下我做折線圖的思路。
先看下漸變折線圖的效果耙考,我沒標(biāo)刻度谜喊,只展示折線圖:

a1.gif

整體的大思路:
1.畫多邊形,(非折線)倦始,因?yàn)檫@里需要有填充色的斗遏,一條線沒法完成,只能是一個(gè)封閉的圖形鞋邑;
2.動(dòng)態(tài)的改變多邊形的寬度诵次。
大思路其實(shí)很簡(jiǎn)單,做過客戶端開發(fā)的同學(xué)可能很快就能實(shí)現(xiàn)枚碗,因?yàn)榭蛻舳擞泻芏嗬L圖的方法和控件逾一。而ReactNative繪圖就沒那么方便了,我看有朋友用純代碼畫過折線圖肮雨,方法很復(fù)雜遵堵,還需要計(jì)算曲率等問題。我就開始找一些三方庫(kù)怨规,綜合對(duì)比陌宿,選擇react-native-svg,github上有3.5k個(gè)start,并且支持iOS和Android。想使用的同學(xué)可以看鏈接波丰,注意iOS工程和安卓工程要做一定的配置壳坪。
具體實(shí)現(xiàn)方法:
一.畫多邊形
使用的是svg庫(kù)里的Polyline(多變形)組件。這里要注意掰烟,既要畫多邊形爽蝴,還要畫上面的那根折線

    <Svg
                        height="200"
                        width="300"
                        style={{ left: 300, position: 'absolute' }}
                    >
                        <Polyline
                            points="0 20,40 5,100 15,150 3,200 20"
                            stroke="black"
                            strokeWidth="2.5"
                        />
                        <Polyline
                            points="0 20,40 5,100 15,150 3,200 20,200 50,0 50,0 20"
                            fill="yellow"
                        />
   </Svg>

折線要有stroke沐批,多邊形要有fill。折線的點(diǎn)要比多邊形的點(diǎn)少霜瘪,因?yàn)椴挥米詈笕プ龇忾]圖形珠插。points的點(diǎn),是按這樣的坐標(biāo)系來的

坐標(biāo)系.png

二颖对。漸變展開
這個(gè)想法也很簡(jiǎn)單捻撑,動(dòng)態(tài)的改變多邊形的width,Animationd中得transform[scaleX:0->1]缤底。讓寬度在指定的時(shí)間里有0變?yōu)?顾患。但是發(fā)現(xiàn)這個(gè)形變效果有問題,X坐標(biāo)不是從0開始个唧,而是從中間開始江解,而且ReactNative還沒有屬性能控制,詳見文章react-native支持transform-origin探索,RN中我們沒法改變transform-origin徙歼。因此只能曲線救國(guó)犁河,將形變的圖形一分為二,用右邊的向右展開的來做動(dòng)畫魄梯。

  <Animated.View style={{
                    height: 200, width: 300 * 2, left: -200, bottom: -300, position: 'absolute', backgroundColor: 'clear', transform: [
                        { scaleX: chartWidth }, // x軸移動(dòng)
                    ]
                }}>
                    <Svg
                        height="200"
                        width="300"
                        style={{ left: 300, position: 'absolute' }}
                    >

至此桨螺,可以達(dá)到開始的gif的效果。同時(shí)也希望facebook能盡快支持transform-origin屬性酿秸。
本文Demo地址歡迎各位同行的提問和指正灭翔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辣苏,隨后出現(xiàn)的幾起案子肝箱,更是在濱河造成了極大的恐慌,老刑警劉巖稀蟋,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煌张,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡糊治,警方通過查閱死者的電腦和手機(jī)唱矛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來井辜,“玉大人,你說我怎么就攤上這事管闷≈嘟牛” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵包个,是天一觀的道長(zhǎng)刷允。 經(jīng)常有香客問我冤留,道長(zhǎng),這世上最難降的妖魔是什么树灶? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任纤怒,我火速辦了婚禮,結(jié)果婚禮上天通,老公的妹妹穿的比我還像新娘泊窘。我一直安慰自己,他們只是感情好像寒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布烘豹。 她就那樣靜靜地躺著,像睡著了一般诺祸。 火紅的嫁衣襯著肌膚如雪携悯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天筷笨,我揣著相機(jī)與錄音憔鬼,去河邊找鬼。 笑死胃夏,一個(gè)胖子當(dāng)著我的面吹牛轴或,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播构订,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侮叮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了悼瘾?” 一聲冷哼從身側(cè)響起囊榜,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亥宿,沒想到半個(gè)月后卸勺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烫扼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年曙求,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片映企。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悟狱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堰氓,到底是詐尸還是另有隱情挤渐,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布双絮,位于F島的核電站浴麻,受9級(jí)特大地震影響得问,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜软免,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一宫纬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膏萧,春花似錦漓骚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至挟鸠,卻和暖如春叉信,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背艘希。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工硼身, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人覆享。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓佳遂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親撒顿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丑罪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • UIBezierPath Class Reference 譯:UIBezierPath類封裝了Core Graph...
    鋼鉄俠閱讀 1,728評(píng)論 0 3
  • SVG 簡(jiǎn)介SVG 是使用 XML 來描述二維圖形和繪圖程序的語(yǔ)言。SVG 指可伸縮矢量圖形 (Scalable ...
    benbensheng閱讀 196評(píng)論 0 0
  • 18- UIBezierPath官方API中文翻譯(待校對(duì)) ----------------- 華麗的分割線 -...
    醉臥欄桿聽雨聲閱讀 1,069評(píng)論 1 1
  • 作者: 阮一峰www.ruanyifeng.com/blog/2018/08/svg.html 一凤壁、概述 SVG ...
    grain先森閱讀 2,813評(píng)論 0 12
  • 第一章 HTML5 (2014年10月29日發(fā)布)新特性: 10個(gè) (1)新的語(yǔ)義標(biāo)簽 (2)增強(qiáng)型表單 (3)視...
    fastwe閱讀 959評(píng)論 0 1