AndroidMPChart股票圖-分時(shí)圖01

AndroidMPChart股票圖-分時(shí)圖01 - 簡(jiǎn)書

AndroidMPChart股票圖-分時(shí)圖02 - 簡(jiǎn)書

AndroidMPChart股票圖-K線圖01 - 簡(jiǎn)書

AndroidMPChart股票圖-K線圖02 - 簡(jiǎn)書


AndroidMPChart是一款android圖表庫,它支持線性圖,柱子圖,蠟燭圖和扇形圖

前段時(shí)間項(xiàng)目用到了AndroidMPChart來畫股票圖,遇到了一些問題分享下。

分時(shí)圖:

我們?cè)诋嫹謺r(shí)圖要和市面上的分時(shí)圖很類似,而原始的mp框架無法滿足我們的需求,則需要修改源碼了。

我們看下下面這個(gè)分時(shí)圖來怎么實(shí)現(xiàn)

分時(shí)圖

我們分析下這個(gè)圖怎么用mp來畫

1.外層有個(gè)邊框這個(gè)mp支持的不需要我們?cè)偃バ薷?/p>

2.有三條橫向的虛線,mp里也是支持的叫做警戒線(這個(gè)類LimitLine)

? 2》LimitLine這個(gè)類它是畫警戒線的

如果我們要在LeftY添加警戒線則是這樣的

//第二個(gè)參數(shù)設(shè)置描述則就會(huì)顯示在左側(cè)的值

LimitLine limitLineMax=new LimitLine("警戒線值",“警戒線描述”);

//是否設(shè)置虛線顯示

limitLineMax.enableDashedLine(“線的長度”, “間隔”, “偏移量”);

//警戒線右側(cè)顯示值

第一步:我們?cè)贚imitLine類中定義這個(gè)變量并實(shí)現(xiàn)set/get方法


添加警戒線右側(cè)標(biāo)簽

第二步:在YAxisRenderer類中的renderLimitLines這個(gè)方法里添加


獲取右標(biāo)簽值

第三步:還是在這個(gè)方法內(nèi)找到畫標(biāo)簽的方法里添加畫右標(biāo)簽

注意這里需要判斷警戒線的位置我用的LEFT_TOP,LEFT_BOTTOM左上和左下


畫標(biāo)簽

設(shè)置完成就OK啦,我們回到警戒線里

//設(shè)置右邊標(biāo)簽值

limitLineMax.setmRightLabel(“右邊標(biāo)簽值”);

//設(shè)置標(biāo)簽顯示在警戒線下方

limitLineMax.setLabelPosition(LimitLine.LimitLabelPosition.LEFT_BOTTOM);

//添加警戒線,3條虛線一樣的添加

axisLeft.addLimitLine(limitLine);

3.畫x軸的標(biāo)簽

原始mp的x軸標(biāo)簽都會(huì)超過最左邊和最右邊邊距,要實(shí)現(xiàn)上面的那種效果我們需要設(shè)置

xAxis.setAvoidFirstLastClipping(true);

設(shè)置這個(gè)方法之后最右邊的還是有問題我們需要修改源碼


改x軸標(biāo)簽

4.畫線的陰影填充背景漸變

在Drawable中定義一個(gè)漸變色的xml


set.setFillDrawable("獲取你定義的xml");

//開啟填充

set.setDrawFilled(true);

5.我們?cè)诋嫹质謭D的時(shí)候會(huì)有動(dòng)態(tài)畫分時(shí)圖的需求,就是當(dāng)數(shù)據(jù)推送一個(gè)點(diǎn)的時(shí)候畫一個(gè)點(diǎn),而不是清空?qǐng)D表從9點(diǎn)30從新畫。我們知道股票圖一分鐘畫一個(gè)點(diǎn)(共242個(gè)點(diǎn))而一分鐘之內(nèi)則會(huì)推送好幾個(gè)點(diǎn)而取的是這個(gè)分鐘的最后一個(gè)點(diǎn)。我們要的效果就是在這一分鐘中推送過來的上下波動(dòng)到這一分鐘完了再去畫這個(gè)點(diǎn)

//實(shí)現(xiàn)在一分鐘之內(nèi)上下波動(dòng)

1.先獲取chartData,


2.然后再根據(jù)chartdata獲取相應(yīng)的dataset(每一個(gè)set代表一條線)


3.獲取當(dāng)前set的最后一個(gè)點(diǎn)索引


4.根據(jù)當(dāng)前set的最后一個(gè)索引獲取Entry


5.設(shè)置Y值

entryForIndex.setY(“推送的Y值”)

6.通知圖表刷新數(shù)據(jù)


//動(dòng)態(tài)添加數(shù)據(jù)

1,2,3,跟實(shí)現(xiàn)在一分鐘之內(nèi)上下波動(dòng)一樣

4.添加到最后一個(gè)索引里

dataSetByIndex.addEntry(indexLast,“添加到值”)

5.刷新數(shù)據(jù)并將圖表移動(dòng)到指定位置

mLineChart.moveViewTo(indexLast,"值",YAxis.AxisDependency.LEFT)


到這里就可以畫出上面的圖了及動(dòng)態(tài)添加分時(shí)圖,下篇文章我說說怎么畫高亮線。

有問題麻煩提出交流共同學(xué)習(xí)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 開始 ####安裝 為了使用 LineChart, BarChart, ScatterChart, CandleS...
    帥氣的豬豬閱讀 8,632評(píng)論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評(píng)論 19 139
  • 你是不是覺得寫一段故事是個(gè)特別麻煩的事兒,你壓根都不知道從哪兒開始。 我從《開發(fā)故事創(chuàng)意》這本書獲得的啟發(fā)是,沒準(zhǔn)...
    聞熙閱讀 400評(píng)論 0 0
  • 一切都在變好。 現(xiàn)有的已經(jīng)很好了,只是需要整理和清潔一下,拿東西擦擦花盆。把石頭里的煙灰弄出來。澆一些水。
    雨季和海風(fēng)閱讀 169評(píng)論 2 0
  • 前日迎來寒露, 昨夜凄風(fēng)殘霧。 晨雨降無休, 一步出門三顧。 秋褲, 秋褲, 秋水望穿何處?
    任爾風(fēng)云我自逍閱讀 553評(píng)論 6 6

友情鏈接更多精彩內(nèi)容