国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Android的平滑折線圖組件的設(shè)計(jì)與實(shí)現(xiàn)

2019-11-14 08:17高毅丁勇涂小琴張春紅
軟件 2019年9期
關(guān)鍵詞:折線圖圖表控制點(diǎn)

高毅 丁勇 涂小琴 張春紅

摘 ?要: 平滑折線圖是最為常用的圖表組件,Android系統(tǒng)并沒有提供,而第三方的技術(shù)又不夠成熟,本文提出了一種基于Android的平滑折線圖組件的實(shí)現(xiàn)方法,從布局空間設(shè)計(jì)、繪制點(diǎn)標(biāo)志、折線圖平滑化、關(guān)鍵代碼等方面對(duì)平滑折線圖組件的設(shè)計(jì)實(shí)現(xiàn)過程進(jìn)行了詳細(xì)描述。該組件實(shí)驗(yàn)效果良好,布局合理,使用方便,支持自定義,用戶體驗(yàn)好,能滿足大多數(shù)Android應(yīng)用開發(fā)的需求,有很好的實(shí)際應(yīng)用價(jià)值和創(chuàng)新性。

關(guān)鍵詞?Android;平滑折線圖;貝塞爾曲線;數(shù)據(jù)可視化

中圖分類號(hào): TP317????文獻(xiàn)標(biāo)識(shí)碼?A????DOI:10.3969/j.issn.1003-6970.2019.09.003

本文著錄格式:高毅,丁勇,涂小琴,等. 基于Android的平滑折線圖組件的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件,2019,40(9):13-17

Design and Implementation of Smooth Line Chart Component Based on Android

GAO Yi, DING Yong, TU Xiao-qin, ZHANG Chun-hong

College of Arts and Sciences, Yunnan Normal University, Kunming 650222,?China

Abstract: The smooth line chart is the most commonly used chart component. The Android system does not provide it, and the third-party technology is not mature enough. This paper proposes an Android-based smooth line chart component implementation method.The design and implementation process of the smooth line graph component is described in detail in layout space design, drawing point mark, the smoothing of the line graph , key codes and so on. The component has good experimental results, reasonable layout, convenient use, support for customization, good user experience, and can meet the needs of most Android application development, and has good practical application value and innovation.

Key words: Android; Smooth line chart; Bezier curve; Data visualization

0??引言

開發(fā)Android應(yīng)用程序,離不開界面設(shè)計(jì),雖然Android系統(tǒng)本身提供了很多組件,如:文本框、編輯框、按鈕、單選按鈕與單選按鈕組、復(fù)選框、圖片框、下拉列表框、列表框、開關(guān)按鈕等,這些組件基本上能滿足大多數(shù)應(yīng)用的開發(fā)需求。統(tǒng)計(jì)圖表是最早的數(shù)據(jù)可視化形式,作為基本的可視化元素仍然被非常廣泛地使用[1]。而平滑折線圖作為最為常用的統(tǒng)計(jì)圖表之一,但Android系統(tǒng)本身并不提供,因此需要開發(fā)者來創(chuàng)建自定義的平滑折線圖組件,以實(shí)現(xiàn)用戶的特殊需求。然而,Android系統(tǒng)

中的平滑折線圖組件的開源方案并不多,第三方的平滑折線圖組件技術(shù)又不夠成熟,要么使用不便,要么不夠靈活,要么用戶體驗(yàn)差。本文通過設(shè)計(jì)一個(gè)基于Android的平滑折線圖組件,實(shí)現(xiàn)了數(shù)據(jù)的可視化展示,該組件使用靈活方便、用戶體驗(yàn)好。下面從布局空間設(shè)計(jì)、繪制點(diǎn)標(biāo)志、折線圖平滑化、關(guān)鍵代碼等方面對(duì)平滑折線圖組件的設(shè)計(jì)實(shí)現(xiàn)過程做詳細(xì)描述。

1??相關(guān)概念

1.1??平滑折線圖

折線圖是用折線(直線)把相鄰的數(shù)據(jù)點(diǎn)連接起來,用于顯示數(shù)據(jù)在一個(gè)連續(xù)的時(shí)間間隔或者時(shí)間跨度上的變化,它的特點(diǎn)是反映事物隨時(shí)間或有序類別而變化的趨勢(shì)[2]

平滑折線圖是在折線圖的基礎(chǔ)上改進(jìn)的,用平滑的曲線代替折線來連接相鄰的數(shù)據(jù)點(diǎn)[3]。在平滑折線圖中,數(shù)據(jù)是遞增還是遞減、增減的速率、增減的規(guī)律(周期性、螺旋性等)、峰值等特征都可以清晰地反映出來。所以,平滑折線圖常用來分析數(shù)據(jù)隨時(shí)間的變化趨勢(shì),也可用來分析多組數(shù)據(jù)隨時(shí)間變化的相互作用和相互影響。

1.2View

Android應(yīng)用的絕大部分UI組件都放在android.widget包及其子包、android.view包及其子包中,Android應(yīng)用的所有UI組件都繼承了View類,View組件非常類似于Swing編程的JPanel,它代表一個(gè)空白的矩形區(qū)域[4]。

基于Android UI組件的實(shí)現(xiàn)原理,開發(fā)者完全可以開發(fā)出項(xiàng)目定制的組件,當(dāng)Android系統(tǒng)提供的UI組件不足以滿足需求時(shí),可以通過繼承View來派生自定義組件。過程為,首先定義一個(gè)繼承View基類的子類,然后重寫View類的一個(gè)或多個(gè)方法來實(shí)現(xiàn)。

1.3Path

在進(jìn)行畫線等操作時(shí)還需要連接路徑,這個(gè)工具由Path提供,Path類中包含一些直線或曲線連接到指定點(diǎn)的方法。Android提供的Path是一個(gè)非常有用的類,它可以預(yù)先在View上將N個(gè)點(diǎn)連成一條“路徑”,然后調(diào)用Canvas的drawPath方法即可沿著路徑繪制圖形[5]。

2??關(guān)鍵技術(shù)

2.1布局空間設(shè)計(jì)

移動(dòng)端應(yīng)用開發(fā)最大的特點(diǎn)之一就是可用顯示空間小,要讓有限的布局空間去展示更多數(shù)據(jù)和信息,所以平滑折線圖組件的布局空間設(shè)計(jì)尤為關(guān)鍵。平滑折線圖的布局空間設(shè)計(jì)如圖1所示,由圖表標(biāo)題區(qū)、Y軸區(qū)、X軸區(qū)、空白區(qū)、系列標(biāo)題區(qū)和圖表繪制區(qū)組成[6-7],其中空白區(qū)并不繪制內(nèi)容,為了在水平方向上對(duì)稱,它的大小和Y軸區(qū)大小一致。在該組件的設(shè)計(jì)過程中,為了能讓Android應(yīng)用開發(fā)者可以自由地去設(shè)置文本的大小,首先計(jì)算該組件在移動(dòng)設(shè)備端的顯示大小,再計(jì)算Y軸區(qū)、X軸區(qū)、空白區(qū)、系列標(biāo)題區(qū)所占大小,最后得到圖表繪制區(qū)的大小。下面就計(jì)算過程做詳細(xì)描述,單位都為像素(px)。

(1)計(jì)算平滑折線圖組件在移動(dòng)設(shè)備端顯示的大小

W表示平滑折線圖組件在移動(dòng)端設(shè)備上所占的寬度,H表示平滑折線圖組件在移動(dòng)端設(shè)備上所占的高度。通過重寫View類中的onMeasure方法來實(shí)現(xiàn)對(duì)WH的計(jì)算。關(guān)鍵代碼如下:

//計(jì)算顯示模式

int specMode=MeasureSpec.getMode?(width Me asure Spec);

//計(jì)算寬度

int width=MeasureSpec.getSize?(widthMe a su reSpec);

//若顯示模式是不確定的值,或者未指定尺寸,設(shè)置一個(gè)200的默認(rèn)值

if (specMode==MeasureSpec.UNSPECIFIED)

{

width=200;

}

//計(jì)算高度的代碼和上面計(jì)算寬度的代碼類似,在此省略

……

setMeasuredDimension(width, height);

編寫好上面的onMeasure方法后,就可以通過以下公式來計(jì)算WH

W=getMeasuredWidth() (1)

H=getMeasuredHeight() (2)

(2)計(jì)算圖表標(biāo)題區(qū)、Y軸區(qū)、X軸區(qū)、系列標(biāo)題區(qū)的大小

為了計(jì)算圖表標(biāo)題區(qū)、Y軸區(qū)、X軸區(qū)、系列標(biāo)題區(qū)所占空間的寬和高,特地編寫了private Rect getTextRect(String text,float textSize)方法,該方法有兩個(gè)參數(shù),第一個(gè)參數(shù)text是顯示文本的內(nèi)容,第2個(gè)參數(shù)textSize是顯示文本的大小,返回值是Rect類型的對(duì)象。由于中文的基線和英文的基線不一樣,為了顯示效果,在計(jì)算文本所占矩形時(shí)做了修正。關(guān)鍵代碼如下:

……

Paint.FontMetricsInt fm=paint.?getFont Met ricsInt();

//修正上邊界,減去文本大小的四分之一

int top=baseLineY+fm.top-(int)(textSize/4.0f);

//修正下邊界,加上文本大小的四分之一

int bottom=baseLineY+fm.bottom+(int)(te x t Size/4.0f);

//計(jì)算文本所占矩形空間的寬度

int width=(int)paint.measureText(text);

Rect rect=new Rect(baseLineX,top,baseLi n e X+width,bottom);

……

編寫好上面的getTextRect方法后,就可以計(jì)算圖表標(biāo)題區(qū)、Y軸區(qū)、X軸區(qū)、系列標(biāo)題區(qū)所占空間的寬和高。

① 圖表標(biāo)題區(qū)的寬WT和高HT計(jì)算公式如下:

WT=getTextRect(圖表標(biāo)題文本內(nèi)容,圖表標(biāo)題文本大小).width()(3)

HT=getTextRect(圖表標(biāo)題文本內(nèi)容,圖表標(biāo)題文本大小).height()(4)

② Y軸區(qū)的寬WY和高HY計(jì)算公式如下:

WY=getTextRect(Y軸刻度值文本內(nèi)容,Y軸刻度值文本大小).width()(5)

HY=getTextRect(Y軸刻度值文本內(nèi)容,Y軸刻度值文本大小).height()(6)

③ X軸區(qū)的寬WT和高HT計(jì)算公式如下:

WX =?getTextRect(X軸刻度值文本內(nèi)容,X軸刻度值文本大小).width() (7)

HX=getTextRect(X軸刻度值文本內(nèi)容,X軸刻度值文本大小).height()(8)

④ 系列標(biāo)題區(qū)的寬WT和高HT計(jì)算公式如下:

WST=getTextRect(系列標(biāo)題文本內(nèi)容,系列標(biāo)題文本大小).width()(9)

HST=getTextRect(系列標(biāo)題文本內(nèi)容系列標(biāo)題文本大小).height()(10)

(3)計(jì)算圖表繪制區(qū)的大小

圖表繪制區(qū)的寬WC和高HC計(jì)算公式如下:

WC=W–WY –WY (11)

HC=H–HT–HX–HST(12)

2.2繪制點(diǎn)標(biāo)志

本文實(shí)現(xiàn)的平滑折線圖組件支持顯示多個(gè)系列值,為了區(qū)別不同的系列,不僅使用了不同的顏色標(biāo)識(shí)不同的曲線,還使用了不同的形狀標(biāo)志標(biāo)識(shí)數(shù)據(jù)點(diǎn)。本文的平滑折線圖組件支持的數(shù)據(jù)點(diǎn)標(biāo)志有8種,分別為圓形、正方形、等邊三角形、菱形、正五邊形、正六邊形、十字形狀和五角星形。

在點(diǎn)標(biāo)志繪制過程中,圓形、正方形、菱形、正六邊形、十字形狀的繪制相對(duì)簡(jiǎn)單。而等邊三角形、正五邊形和五角星形3種點(diǎn)標(biāo)志的繪制相對(duì)復(fù)雜,需要用到Android中的Path方面的技術(shù)。為了方便控制點(diǎn)標(biāo)志的位置和大小,點(diǎn)標(biāo)志是在一個(gè)圓心點(diǎn)坐標(biāo)為(centerX,?centerY)、半徑為width/2的圓內(nèi)進(jìn)行繪制。下面就這3種點(diǎn)標(biāo)志的繪制過程做詳細(xì)描述。

下面3種點(diǎn)標(biāo)志的設(shè)計(jì)如圖2所示,Android中canvas的繪圖坐標(biāo)和數(shù)學(xué)的平面直角坐標(biāo)不同,向右代表X軸的正方向,向下代表Y軸的正方向。

(1)等邊三角形

等邊三角形的繪制是在圓心為(centerX, centerY)、半徑為width/2的圓內(nèi)進(jìn)行的,也就是要在圓的邊上確定三個(gè)點(diǎn),使這三個(gè)點(diǎn)能夠形成等邊三角形。如圖2(左)描述,這三個(gè)點(diǎn)分別為P0、P1、P2,根據(jù)三角函數(shù)可以計(jì)算出它們的坐標(biāo):

P0(centerX, centerY-width/2)

P1(centerX+(width/2)*cos(30), centerY+(width/2)*sin(30))

P2(centerX-(width/2)*cos(30), centerY+(width/2)*sin(30))

再把這三個(gè)點(diǎn)依次連接到Path對(duì)象中并形成閉環(huán),通過繪制Path對(duì)象就可以實(shí)現(xiàn)等邊三角形的繪制。

(2)正五邊形

正五邊形的繪制是在圓心為(centerX,?centerY)、半徑為width/2的圓內(nèi)進(jìn)行的,也就是要在圓的邊上確定五個(gè)點(diǎn),使這五個(gè)點(diǎn)能夠形成正五邊形。如圖2(中)描述,這五個(gè)點(diǎn)分別為P0、P1、P2、P3、P4,根據(jù)三角函數(shù)可以計(jì)算出它們的坐標(biāo):

P0(centerX, centerY-width/2)

P1(centerX+(width/2)*cos(18), center-(width/2)*sin(18))

P2(centerX+(width/2)*cos(54), center+(width/2)*sin(54))

P3(centerX-(width/2)*cos(54), center+(width/2)*sin(54))

P4(centerX-(width/2)*cos(18), center-(width/2)*sin(18))

再把這五個(gè)點(diǎn)依次連接到Path對(duì)象中并形成閉環(huán),通過繪制Path對(duì)象就可以實(shí)現(xiàn)正五邊形的繪制。

(3)五角星形

五角星形的繪制是在圓心為(centerX,?centerY)、半徑為width/2的圓內(nèi)進(jìn)行的,也就是要在圓的邊上確定五個(gè)點(diǎn),使這五個(gè)點(diǎn)能夠形成五角星形。如圖2(右)描述,這五個(gè)點(diǎn)分別為P0、P1、P2、P3、P4,根據(jù)三角函數(shù)可以計(jì)算出它們的坐標(biāo):

P0(centerX, centerY-width/2)

P1(centerX-(width/2)*cos(54), center+(width/2)*sin(54))

P2(centerX-(width/2)*cos(18), center-(width/2)*sin(18))

P3(centerX+(width/2)*cos(18), center-(width/2)*sin(18))

P4(centerX-(width/2)*cos(54), center+(width/2)*sin(54))

再把這五個(gè)點(diǎn)依次連接到Path對(duì)象中并形成閉環(huán),通過繪制Path對(duì)象就可以實(shí)現(xiàn)五角星形的繪制。

2.3折線圖平滑化

平滑折線圖是在折線圖的基礎(chǔ)上改進(jìn)的,用平滑的曲線代替折線來連接相鄰的數(shù)據(jù)點(diǎn)。本文選用3次Bezier曲線作為平滑的曲線,下面就折線圖平滑化問題做詳細(xì)描述。

(1)3次Bezier曲線

繪制平滑折線圖相當(dāng)于數(shù)學(xué)問題:在平面上存在n個(gè)數(shù)據(jù)點(diǎn)Pi(xi,yi),其中i=1,2,3,…,n。在相鄰的每?jī)蓚€(gè)點(diǎn)Pi和Pi+1之間,用一條3次Bezier曲線連接。

3次Bezier曲線由4個(gè)點(diǎn)確定,起點(diǎn)Pi,終點(diǎn)Pi+1,在起點(diǎn)和終點(diǎn)之間還需要2個(gè)控制點(diǎn)。用3次Bezier曲線把相鄰的兩個(gè)點(diǎn)連接起來,需要2個(gè)控制點(diǎn),平面上存在n個(gè)數(shù)據(jù)點(diǎn),要把這n個(gè)數(shù)據(jù)點(diǎn)依次用3次Bezier曲線連接起來,共需要2*(n-1)個(gè)控制點(diǎn),記為C1i和C2i,其中i=1,2,3,…,n-1[8]。

繪制3次Bezier曲線最為關(guān)鍵的就是確定控制點(diǎn)。如果在各段3次Bezier曲線的接頭處,只要求曲線函數(shù)式的一階導(dǎo)數(shù)連續(xù)[9],也就是說,只要求曲線的切線斜率連續(xù),那么,只要過每一個(gè)Pi點(diǎn),分別作曲線的切線,然后把位于Pi前面的控制點(diǎn)C2i-1和位于Pi后面的控制點(diǎn)C1i,都取在過?Pi點(diǎn)所作的切線上就可以了。把過Pi點(diǎn)的切線方向,取為與線段Pi-1Pi+1平行的方向,得到控制點(diǎn)坐標(biāo)。

控制點(diǎn)C1i的坐標(biāo)為:

C1i(xi+S*(xi+1-xi-1), yi+S*(yi+1-yi-1))

控制點(diǎn)C2i的坐標(biāo)為:

C2i(xi-S*(xi+1-xi-1), yi-S*(yi+1-yi-1))

其中,S是一個(gè)常量,表示平滑系數(shù),且s∈(0,?1)。

上述方法是很多應(yīng)用計(jì)算3次Bezier曲線控制點(diǎn)的方法,使用該方法,得到實(shí)驗(yàn)效果如圖3所示。在該圖中,圓點(diǎn)表示數(shù)據(jù)點(diǎn),五角星表示控制點(diǎn),并用線條把相鄰的控制點(diǎn)連接起來。

從圖3上可以看到,第3個(gè)數(shù)據(jù)點(diǎn)的Y值大于第4個(gè)數(shù)據(jù)點(diǎn)的Y值,那么,連接這兩個(gè)數(shù)據(jù)點(diǎn)的曲線應(yīng)該是單調(diào)遞減的,但實(shí)驗(yàn)效果并不是。還有第10個(gè)數(shù)據(jù)點(diǎn)到第11個(gè)數(shù)據(jù)點(diǎn)間的曲線應(yīng)該是單調(diào)遞增的,但繪制出來的效果是先遞增再遞減。這樣的效果不能很好的表示平滑折線圖的涵義,下面就控制點(diǎn)坐標(biāo)的計(jì)算做出修正。

(2)修正控制點(diǎn)

把相鄰的數(shù)據(jù)點(diǎn)用曲線連接起來,并能表示數(shù)據(jù)是遞增或者遞減的。為了不出現(xiàn)上面描述的情況,遞增后遞減,遞減后遞增。控制點(diǎn)的Y坐標(biāo)不應(yīng)超過(大于或小于)相應(yīng)數(shù)據(jù)點(diǎn)的Y坐標(biāo),把控制點(diǎn)的Y坐標(biāo)的值修正為相應(yīng)數(shù)據(jù)點(diǎn)的Y坐標(biāo),得到新的控制點(diǎn)表示為C1i和C2i,其中i=1,2,3,…,n-1。

控制點(diǎn)C1i的坐標(biāo)為:

C1i(xi+S*(xi+1-xi-1), yi

控制點(diǎn)C2i的坐標(biāo)為:

C2i(xi-S*(xi+1-xi-1), yi

同上,S是一個(gè)常量,表示平滑系數(shù),且s∈(0,?1)。

使用該方法,得到實(shí)驗(yàn)效果如圖4所示。在該圖中,相鄰數(shù)據(jù)點(diǎn)間的曲線能很好的表示數(shù)據(jù)間遞增或者遞減的的趨勢(shì)。

2.4關(guān)鍵代碼

(1)計(jì)算控制點(diǎn)的關(guān)鍵代碼如下

……

//計(jì)算控制點(diǎn)

for(int j=1;j

//取數(shù)據(jù)點(diǎn)Pi-1

PointF p0 = points.get(i).getMyPoints().get(j-1);

//取數(shù)據(jù)點(diǎn)Pi

PointF p = points.get(i).getMyPoints().get(j);

//取數(shù)據(jù)點(diǎn)Pi+1

PointF p1 = points.get(i).getMyPoints().get(j+1);

//計(jì)算控制點(diǎn)相對(duì)數(shù)據(jù)點(diǎn)Pi的X方向的偏移,平滑系數(shù)為1/8

lX = Math.abs((p1.x-p0.x))*(1.0/8.0);

//計(jì)算第1個(gè)控制點(diǎn)

float x1 = p.x + lX;

float y1 = p.y;

//計(jì)算第2個(gè)控制點(diǎn)

float x2 = p.x - lX;

float y2 = p.y;

//把控制點(diǎn)添加到動(dòng)態(tài)數(shù)組中

point1.add(new PointF(x1,y1));

point2.add(new PointF(x2,y2));

}

……

(2)繪制平滑折線圖的關(guān)鍵代碼如下

……

//定義Path對(duì)象

linePath = new Path();

//設(shè)置第1個(gè)數(shù)據(jù)點(diǎn)為Path的起點(diǎn)

linePath.moveTo(points.get(i).getMyPoints().get(0).x,points.get(i).getMyPoints().get(0).y);

//設(shè)置畫筆對(duì)象的顏色屬性

linePaint.setARGB(seriesItemColor.get(i%seriesItem Color.size()).getA(),seriesItemColor.get(i%se riesItemColor.size()).getR(),seriesItemColor.get(i% serie s ItemColor.size()).getG(),seriesItemColor.get (i%ser ie sItemColor.size()).getB());

for(int j=1;j<points.get(i).getMyPoints().size();j++){

//取當(dāng)前要繪制的曲線的第1個(gè)控制點(diǎn)

float x1=point1.get(i).getMyPoints().get(j-1).x;

float y1=point1.get(i).getMyPoints().get(j-1).y;

//取當(dāng)前要繪制的曲線的第2個(gè)控制點(diǎn)

float x2=point2.get(i).getMyPoints().get(j-1).x;

float y2=point2.get(i).getMyPoints().get(j-1).y;

//取當(dāng)前要繪制的曲線的終點(diǎn)

float x=points.get(i).getMyPoints().get(j).x;

float y=points.get(i).getMyPoints().get(j).y;

//計(jì)算3次Bezier曲線的路徑,并把此路徑添加到Path對(duì)象linePath中

linePath.cubicTo(x1,y1,x2,y2,x,y);

}

for(int j=0;j<points.get(i).getMyPoints().size();j++){

//繪制點(diǎn)標(biāo)志

drawMark(canvas,seriesMark[i%seriesMark.?length],seriesItemColor.get(i%seriesItemCol or.size()),points.get(i).getMyPoints().get(j).x,?points.get(i).getMyPoints().get(j).y,dpTopx(m arkWidth));

}

//通過Path對(duì)象linePath來實(shí)現(xiàn)對(duì)3次Bezier曲線的繪制

canvas.drawPath(linePath, linePaint);

……

3??實(shí)驗(yàn)效果

本文實(shí)現(xiàn)的平滑折線圖組件的實(shí)驗(yàn)效果如圖5、圖6所示,圖5的平滑系數(shù)為0.25,圖6的平滑系數(shù)為0.125,兩個(gè)圖進(jìn)行對(duì)比,平滑系數(shù)小的,曲線的曲率小,更接近于直線,反之,平滑系數(shù)大的,曲線的曲率大。該平滑折線圖可以顯示多個(gè)系列,不同的系列,不僅曲線顏色不一樣,點(diǎn)標(biāo)志的樣式也不一樣,而且還具有動(dòng)畫效果,動(dòng)畫效果為依次從

左到右顯示,相比現(xiàn)有的第三方類似的組件,具有更好的用戶體驗(yàn)。在實(shí)際應(yīng)用中,該平滑折線圖還可以自定義背景顏色、背景線條粗細(xì)、背景線條顏色、文本大小、文本顏色等屬性,滿足了Android開發(fā)者更多的需求,顯示效果的設(shè)置多樣化,使用更加靈活。盡管目前也有一些基于Android的平滑折線圖組件,或多或少都存在一些問題,如使用不便、不夠靈活等,相比之下,本文描述的平滑折線圖組件還是具有一定的實(shí)用性和創(chuàng)新性。

4??結(jié)語

本文提出的基于Android的平滑折線圖組件可以解決一些數(shù)據(jù)展示的問題,可以展示多個(gè)系列的數(shù)據(jù),方便不同系列的數(shù)據(jù)進(jìn)行對(duì)比,能夠清晰地反映出數(shù)據(jù)是遞增還是遞減、增減的速率、增減的規(guī)律、峰值等特征。經(jīng)過測(cè)試,布局整齊,響應(yīng)速度快,動(dòng)畫效果良好,大大增強(qiáng)了用戶體驗(yàn),能滿足大多數(shù)Android應(yīng)用開發(fā)人員的需求。但是,還是有一些方面需要進(jìn)一步研究,如動(dòng)態(tài)心電圖、Bezier曲線在數(shù)據(jù)可視化中的應(yīng)用等等,在下一步

的研究工作中,將在這些方面做深入研究。

參考文獻(xiàn)

  • 陳為, 沈則潛, 陶煜波. 數(shù)據(jù)可視化[M]. 北京: 電子工業(yè)出版社, 2013.?12: 129.
  • 張文彤,?鄺春偉. SPSS統(tǒng)計(jì)分析基礎(chǔ)教程[M]. 北京市: 高等教育出版社, 2011.?11: 36.
  • 彭愿, 吳阿丹, 董興鵬, 李勝樂. 用JavaScript實(shí)現(xiàn)網(wǎng)頁曲線圖動(dòng)態(tài)信息顯示[J]. 軟件, 2012,33(1): 98-101.
    • 李剛, 瘋狂Android講義(第3版)[M]
    • . 北京: 電子工業(yè)出版社, 2015.?6: 123.
  • 啟艦, Android自定義控件開發(fā)入門與實(shí)踐[M]. 北京: 電子工業(yè)出版社, 2018.?7: 54.
  • 高毅,?王昕,?楊克光.?Android平臺(tái)下折線圖組件的研究和實(shí)現(xiàn)[J].?現(xiàn)代計(jì)算機(jī),?2016.?5: 69-71.
  • 高毅,?楊克光,?王昕.?基于Android平臺(tái)的柱狀圖組件的設(shè)計(jì)實(shí)現(xiàn)[J].?現(xiàn)代計(jì)算機(jī),?2016.?6: 77-80.
  • 石屹,?金登男.?基于塞爾曲線擬合的心電信號(hào)模式分類方法[J].?計(jì)算機(jī)工程與設(shè)計(jì),?2013.?4: 1437-1441.
  • 劉成志,?李軍成,?楊煉.?基于三次Bézier 曲線逼近的邊緣亞像素定位方法[J]. 軟件, 2015, 36(7): 31-35.
  • 李晉宏, 戴海濤. 可穿戴設(shè)備數(shù)據(jù)挖掘及可視化技術(shù)的研究[J].?軟件, 2015, 36(12): 69-71.

猜你喜歡
折線圖圖表控制點(diǎn)
Optimization Design of Miniature Air Quality Monitoring System Based on Multi-Sensor Fusion Technology
讓折線圖顯示在一個(gè)單元格中
NFFD控制點(diǎn)分布對(duì)氣動(dòng)外形優(yōu)化的影響
基于風(fēng)險(xiǎn)管理下的項(xiàng)目建設(shè)內(nèi)部控制點(diǎn)思考
相似材料模型中控制點(diǎn)像點(diǎn)坐標(biāo)定位研究
SDCORS在基礎(chǔ)地理信息控制點(diǎn)補(bǔ)測(cè)中的應(yīng)用
区。| 汪清县| 平阴县| 仙游县| 饶阳县| 宣威市| 信丰县| 大足县| 扎鲁特旗| 城步| 永和县| 讷河市| 桃江县| 高雄县| 平定县| 分宜县| 西乌珠穆沁旗| 个旧市| 东乡族自治县| 香河县| 昭苏县| 海原县| 寻乌县| 锦州市| 安塞县| 射洪县| 新干县| 雅安市| 枣强县| 小金县| 宁蒗| 大宁县| 海阳市| 尚义县| 岳西县| 临邑县| 宜宾县| 永州市| 赣州市| 资溪县| 五常市|