MPAndroidChart 自定義圖表繪制使用實(shí)例
引言
聲明:文中的MPChart代指MPAndroidChart.
本文主要講解LineChart中的三個變種Chart,第一個是漸變的LineGradientChart, 第二個是頻率散點(diǎn)圖,游泳階梯圖,其實(shí)MPChart本身也有階梯圖的,DataSet.isDrawSteppedEnabled()這個屬性來控制。
1. LineGradientChart
原理:每個Entry中的 Yvalue 值,計算值所在的顏色區(qū)間,顏色的值少于值范圍。然后繪制線段的時候,drawLine 時設(shè)置LineGradient就可以了, colorList跟 entryList 一樣存到DataSet中,dataSet.setColors(colorList) Api 接收colorList。
for (int j = mXBounds.min; j <= mXBounds.range + mXBounds.min; j++) { Entry e = dataSet.getEntryForIndex(j); ... //設(shè)置 lineGradient mRenderPaint.setShader(new LinearGradient(startX, mLineBuffer[1], endX, mLineBuffer[3], dataSet.getColor(j), dataSet.getColor(j+1), Shader.TileMode.MIRROR)); //用 lineGradient繪制線段。 canvas.drawLines(mLineBuffer, 0, pointsPerEntryPair * 2, mRenderPaint); }
圖1.0 LineGradientChart
2. 散點(diǎn)圖
先看圖1.1 散點(diǎn)圖:
圖1.1 散點(diǎn)圖
這個其實(shí)有很多做法的,這里直接用LineChart,然后drawLine 時 Paint 的color transparent,或者直接屬性控制不畫。
設(shè)置DataSet.drawCircle(true), 就會繪制 Point點(diǎn)了。三種不同的顏色的Point,DataSetList, 這里自定義了一個CustomDataSet,不同的值區(qū)間用不同的Type,對應(yīng)不同的顏色即可。
圖1.2 散點(diǎn)圖DataSet自定義
3. SteppedChart
階梯圖就是前后兩個點(diǎn)的連線是90度上去或者下來的,即X軸的值是一定的。這里存在一個問題,MPChart中的X軸、Y軸的值是一一對應(yīng)的,就是Point(1.0, 4) , Point(1.0, 8) 最終存入 DataSet只能有一個,后來的會將前面的覆蓋。想辦法如何繪制這種SteppedChart呢,就在最后一步,將Transformer轉(zhuǎn)化后的 Buffer里的數(shù)據(jù) currentEntry對應(yīng)的點(diǎn)的 X值改成 PreCurrentEntry的X值,當(dāng)他們滿足業(yè)務(wù)上的階梯的條件時,或者將PreCurrentEntry的X值的值改成 currentEntry對應(yīng)的點(diǎn)的 X值。
直接看圖:
圖1.3 SteppedChart
本章節(jié)主要簡單的介紹了幾個LineChart 的變種,稍微修改部分屬性就可以繪制不同需求的圖形。至此,MPChart自定義相關(guān)的圖形告一段落,原本計劃的還有些比如RTL相關(guān)的,還有曲線圖表的繪制等,有問題需要了解的讀者可以留言或者加筆者的聯(lián)系方式探討。
后續(xù)介紹另外一種脫離MPChart圖表,基于RecycleView繪制的圖表,可實(shí)現(xiàn)的功能可以參照蘋果健康里的一些數(shù)據(jù)圖表,無限左右滑動,按下高亮選中滑動,以日、周、月為單位控制 單位區(qū)間里的數(shù)據(jù),可以屬性控制是否單位區(qū)間顯示,可以自動彈回到鄰近的單位區(qū)間邊界等功能。
以上就是MPAndroidChart 自定義圖表繪制使用實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于MPAndroidChart 自定義圖表的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android編程實(shí)現(xiàn)播放視頻時切換全屏并隱藏狀態(tài)欄的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)播放視頻時切換全屏并隱藏狀態(tài)欄的方法,結(jié)合實(shí)例形式分析了Android視頻播放事件響應(yīng)及相關(guān)屬性設(shè)置操作技巧,需要的朋友可以參考下2017-08-08Android ProgressBar 模擬進(jìn)度條效果的實(shí)現(xiàn)
這篇文章主要介紹了Android ProgressBar 模擬進(jìn)度條效果的實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Android中利用動態(tài)加載實(shí)現(xiàn)手機(jī)淘寶的節(jié)日特效
這篇文章主要介紹了Android中利用動態(tài)加載實(shí)現(xiàn)手機(jī)淘寶的節(jié)日特效,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12Android靜默安裝實(shí)現(xiàn)方案 仿360手機(jī)助手秒裝和智能安裝功能
這篇文章主要介紹了Android靜默安裝實(shí)現(xiàn)方案,仿360手機(jī)助手秒裝和智能安裝功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11Android使用Kotlin和RxJava 2.×實(shí)現(xiàn)短信驗(yàn)證碼倒計時效果
本篇文章主要介紹了Android使用Kotlin和RxJava 2.×實(shí)現(xiàn)短信驗(yàn)證碼倒計時效果,非常具有實(shí)用價值,需要的朋友可以參考下2017-12-12Android webview與js交換JSON對象數(shù)據(jù)示例
js主動調(diào)用android的對象方式,android也無法返回給js一個jsonobject,需要js做一下轉(zhuǎn)換,具體代碼如下,感興趣的朋友可以參考下哈2013-06-06Android創(chuàng)建和使用數(shù)據(jù)庫SQLIte
這篇文章主要為大家詳細(xì)介紹了Android創(chuàng)建和使用數(shù)據(jù)庫SQLIte的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-05-05Android 自定義控件實(shí)現(xiàn)顯示文字的功能
這篇文章主要介紹了Android 自定義控件實(shí)現(xiàn)顯示文字的功能的相關(guān)資料,需要的朋友可以參考下2016-11-11