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)

我們分析下這個(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方法

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

第三步:還是在這個(gè)方法內(nèi)找到畫標(biāo)簽的方法里添加畫右標(biāo)簽
注意這里需要判斷警戒線的位置我用的LEFT_TOP,LEFT_BOTTOM左上和左下

設(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è)方法之后最右邊的還是有問題我們需要修改源碼

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í)。