基于RecyclerChart的KLine繪制詳解
本章節(jié)是KLine的繪制的第二章節(jié),在原來(lái)的基礎(chǔ)上繪制5、10、20日均線。下面是gif的效果。
其實(shí)只是把線性圖表的繪制邏輯搬到這邊一起,上篇文章提到在一個(gè)For循環(huán)里處理,減少遍歷,之前是通過(guò)Entry的Y值找對(duì)應(yīng)的PointF的Y值,這里需要用StockEntry中的5日、10日、20日均線值去求值。就是類似的一些邏輯替換,思想還是不變,然后左右邊界的處理暫時(shí)先放一放,滑動(dòng)到邊界會(huì)有一些bug。
同時(shí),這里的均值沒(méi)有參與到圖表YAxis的Max、min的計(jì)算中去,會(huì)有線出上下邊界的情況,待修復(fù)。
整體的繪制思想還是比較簡(jiǎn)單的,代碼如下:
然后就是5/10/20均線點(diǎn)的繪制,這里值最好Server返回,或者計(jì)算好存入數(shù)據(jù)庫(kù),然后圖表每次繪制時(shí)從數(shù)據(jù)庫(kù)里讀取數(shù)據(jù)。所以這三個(gè)值,跟繪制沒(méi)有關(guān)聯(lián)。
用一個(gè)滑動(dòng)窗口的管理類,外加一個(gè)隊(duì)列,在原來(lái)的一次遍歷的基礎(chǔ)上處理完:
var queue:Queue<Float> = LinkedList() var sum:Float = 0f fun queueAddItem(value:Float){ queue.offer(value) sum += value } fun queueRemoveItem(){ val value = queue.poll() value?.let { sum -= value } } fun getAvg(type:Int, value: Float): Float{ queueAddItem(value) val count = queue.size if (count < type){ return value }else if (count == type){ val avg = sum/count queueRemoveItem() return avg } return -1f } }
接下來(lái)會(huì)處理底部的成交量圖以及其它的一些底部圖表;之前的方式是通過(guò)兩個(gè)Chart表的聯(lián)動(dòng)處理,看見(jiàn)網(wǎng)上有MPChartAndroid的類似的也是這樣處理的。繪制均線的過(guò)程中想到為什么不一起畫(huà)呢?同樣可以在上面的那個(gè)for循環(huán)里一起畫(huà)了,然后就不存在兩表的聯(lián)動(dòng)問(wèn)題了。只不過(guò)多了一個(gè)工作就是,需要處理兩個(gè)YAxis,同時(shí),底部點(diǎn)YAxis也要實(shí)時(shí)地計(jì)算Max、Min, 然后聯(lián)動(dòng)圖表。
再就是縮放,上一章節(jié)提到的,其實(shí)只需縮放后,按比例計(jì)算當(dāng)下的DisplayNumber,然后再invalidate(), 這里的話就是Adapter.notifyDatachange()應(yīng)該就Okay了,本章節(jié)暫時(shí)先到此。
到此這篇關(guān)于基于RecyclerChart的KLine繪制詳解的文章就介紹到這了,更多相關(guān)RecyclerChart KLine內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot掃描自定義的servlet和filter代碼詳解
本文是一篇根據(jù)作者工作經(jīng)歷總結(jié)出來(lái)的關(guān)于springboot掃描自定義的servlet和filter代碼詳解的文章,小編覺(jué)得非常不錯(cuò),這里給大家分享下,和朋友們一起學(xué)習(xí),進(jìn)步。2017-10-10詳解Alibaba?Java診斷工具Arthas查看Dubbo動(dòng)態(tài)代理類
這篇文章主要介紹了Alibaba?Java診斷工具Arthas查看Dubbo動(dòng)態(tài)代理類?,它可以幫助我們查看JDK或者javassist生成的動(dòng)態(tài)代理類,當(dāng)然,它的功能遠(yuǎn)不止此,還可以在生產(chǎn)環(huán)境進(jìn)行診斷,需要的朋友可以參考下2022-04-04Mybatis-Plus 自動(dòng)填充失效問(wèn)題解決
在使用MyBatis-Plus時(shí),自動(dòng)填充功能可能會(huì)失效,這通常與版本和配置有關(guān),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10MybatisPlus特殊查詢的實(shí)現(xiàn)介紹
這篇文章主要介紹了MybatisPlus查詢投影、聚合查詢、分組查詢、等值查詢、范圍查詢、模糊查詢、排序查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10基于SpringBoot接口+Redis解決用戶重復(fù)提交問(wèn)題
當(dāng)網(wǎng)絡(luò)延遲的情況下用戶多次點(diǎn)擊submit按鈕導(dǎo)致表單重復(fù)提交,用戶提交表單后,點(diǎn)擊瀏覽器的【后退】按鈕回退到表單頁(yè)面后進(jìn)行再次提交也會(huì)出現(xiàn)用戶重復(fù)提交,辦法有很多,我這里只說(shuō)一種,利用Redis的set方法搞定,需要的朋友可以參考下2023-10-10java編程幾行代碼實(shí)現(xiàn)買(mǎi)菜自由
這篇文章主要為大家介紹了java編程幾行代碼實(shí)現(xiàn)買(mǎi)菜自由,需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05