MPAndroidChart介紹

開始 ####安裝 為了使用 LineChart, BarChart, ScatterChart, CandleStickChart, PieChart or RadarChart,像下面一樣定義它在 .xml中:

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

然后通過(guò)下面的方式從你的Activity, Fragment諸如此類的東西中檢索它:

    LineChart chart = (LineChart) findViewById(R.id.chart);

或者創(chuàng)建它在代碼中(然后增加它到一個(gè)布局中):

    LineChart chart = new LineChart(Context);

    RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout);
    rl.add(chart);

更新

invalidate():在圖表圖表項(xiàng)目中調(diào)用這個(gè)方法將重新刷新屏幕。

數(shù)據(jù)記錄

setLogEnabled(boolean enabled):設(shè)置這個(gè)為真將激活圖表項(xiàng)目中的logcat輸出

通用圖表項(xiàng)目樣式

下面是一些你能直接使用在圖表項(xiàng)目中的通用的樣式方法。

setBackgroundColor(int color):設(shè)置背景顏色這將覆蓋整個(gè)圖表項(xiàng)目視圖。另外,一個(gè)背景顏色能被設(shè)置在.xml的布局文件中
setDescription(String desc):設(shè)置一個(gè)描述文本出現(xiàn)在圖表的右下角。
setDescriptionColor(int color): 設(shè)置描述文本的顏色。
setDescriptionPosition(float x, float y): 設(shè)置一個(gè)自定義坐標(biāo)用于定位描述文本在屏幕上的像素。
setDescriptionTypeface(Typeface t): 設(shè)置采用Typeface來(lái)繪制買描述文本。
setDescriptionTextSize(float size): 設(shè)置描述文本的像素尺寸,最小6f,最大16f。
setNoDataTextDescription(String desc): 設(shè)置圖表為空時(shí)出現(xiàn)的文本。
setDrawGridBackground(boolean enabled): 如果打開,背景矩形將出現(xiàn)在已經(jīng)畫好的繪圖區(qū)域的后邊。
setGridBackgroundColor(int color): 設(shè)置網(wǎng)格背景顏色。
setDrawBorders(boolean enabled):打開或關(guān)閉繪制的圖表邊框。(環(huán)繞圖表的線)
setBorderColor(int color):設(shè)置圖表邊框線的顏色。
setBorderWidth(float width): 設(shè)置圖表邊框線的寬度。
setMaxVisibleValueCount(int count): 設(shè)置一個(gè)數(shù)字用于圖表中顯示繪制的值標(biāo)簽。這僅作用于當(dāng)setDrawValues()允許時(shí)。

與圖表交互

這個(gè)庫(kù)允許你完全自定義與圖表視圖觸摸交互的各種情況以及對(duì)交互其作用的回調(diào)方法。

打開/關(guān)閉交互

setTouchEnabled(boolean enabled): 允許你打開或者關(guān)閉與圖表的所有觸摸交互的情況。
setDragEnabled(boolean enabled): 打開或關(guān)閉對(duì)圖表的拖動(dòng)。
setScaleEnabled(boolean enabled):打開或關(guān)閉對(duì)圖表所有軸的的縮放。
setScaleXEnabled(boolean enabled): 打開或關(guān)閉x軸的縮放
setScaleYEnabled(boolean enabled): 打開或關(guān)閉y軸的縮放。
setPinchZoom(boolean enabled): 如果設(shè)置為true,擠壓縮放被打開。如果設(shè)置為false,x和y軸可以被單獨(dú)擠壓縮放。
setHighlightEnabled(boolean enabled): 如果設(shè)置為true,在圖表中通過(guò)觸屏高亮或選擇值是可能的。
setHighlightPerDragEnabled(boolean enabled): 設(shè)置為true時(shí)允許高亮顯示拖動(dòng)結(jié)束的對(duì)象在縮放到最下時(shí)。默認(rèn):true
setHighlightIndicatorEnabled(boolean enabled): 如果設(shè)置為true, 指標(biāo)線(或桿)將展示被選擇的線的繪制的值。

通過(guò)編程自動(dòng)高亮

highlightValues(Highlight[] highs): 突出顯示給定索引處的值在被給定的數(shù)據(jù)集中。提供null或空的數(shù)組將取消所有的高亮。
highlightValues(Highlight[] highs): 突出顯示給定xIndex為索引在被給定的數(shù)據(jù)集中。提供-1時(shí)將去取消所有的高亮
getHighlighted():返回一個(gè)Highlight[]的數(shù)組包含關(guān)于所有高亮入口的信息,它們的x-索引和數(shù)據(jù)集的索引。

編程自動(dòng)高亮將不產(chǎn)生OnChartValueSelectedListener回調(diào)

選擇回調(diào)

這個(gè)庫(kù)提供了大量的監(jiān)聽回調(diào)在交互后。其中一個(gè)是OnChartValueSelectedListener,在觸屏高亮值的時(shí)候進(jìn)行回調(diào)。

    public interface OnChartValueSelectedListener {
        /**
        * Called when a value has been selected inside the chart.
        *
        * @param e The selected Entry.
        * @param dataSetIndex The index in the datasets array of the data object
        * the Entrys DataSet is in.
        * @param h the corresponding highlight object that contains information
        * about the highlighted position
        */
        public void onValueSelected(Entry e, int dataSetIndex, Highlight h);
        /**
        * Called when nothing has been selected or an "un-select" has been made.
        */
        public void onNothingSelected();
    }  

讓你的類接收回調(diào)實(shí)現(xiàn)這個(gè)接口并設(shè)置它作為圖表的一個(gè)listener

    chart.setOnChartValueSelectedListener(this);

手勢(shì)回調(diào)

OnChartGestureListener將允許你對(duì)圖表上的手勢(shì)作出反應(yīng):

    public interface OnChartGestureListener {
    
        /**
         * Callbacks when the chart is longpressed.
         * 
         * @param me
         */
        public void onChartLongPressed(MotionEvent me);
    
        /**
         * Callbacks when the chart is double-tapped.
         * 
         * @param me
         */
        public void onChartDoubleTapped(MotionEvent me);
    
        /**
         * Callbacks when the chart is single-tapped.
         * 
         * @param me
         */
        public void onChartSingleTapped(MotionEvent me);
    
        /**
         * Callbacks then a fling gesture is made on the chart.
         * 
         * @param me1
         * @param me2
         * @param velocityX
         * @param velocityY
         */
        public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY);
    }

讓你的類接收回調(diào)實(shí)現(xiàn)這個(gè)接口并設(shè)置它作為圖表的一個(gè)listener

    chart.setOnChartGestureListener(this);

The Axis(AxisBase) 此頁(yè)關(guān)注AxisBase類,他是XAxis和YAxis的基類。

下面提及的方法在兩個(gè)軸上都能使用。

這個(gè)軸類允許對(duì)下面的組件或部分指定具體的樣式:

標(biāo)簽(繪制時(shí)垂直對(duì)齊),包括軸的描述值。
坐標(biāo)軸,它直接被繪制平行于標(biāo)簽旁邊。
網(wǎng)格線,每個(gè)來(lái)自水平方向的標(biāo)簽軸。
LimitLines,允許呈現(xiàn)具體的信息,像邊框或者限制。

控制軸的哪部分應(yīng)該被繪制

setEnabled(boolean enabled):設(shè)置軸的打開或者關(guān)閉。如果關(guān)閉,坐標(biāo)軸不會(huì)被繪制。
setDrawAxisLine(boolean enabled): 設(shè)置為true,如果線在軸的側(cè)面應(yīng)該被畫,否則不。
setDrawGridLines(boolean enabled): 設(shè)置為true打開繪制網(wǎng)格線對(duì)于軸來(lái)說(shuō)。
setDrawLabels(boolean enabled):設(shè)置為true打開繪制軸的標(biāo)簽。

修改軸線樣式

setTextColor(int color): 設(shè)置軸標(biāo)簽的顏色。
setTextSize(float size):設(shè)置軸標(biāo)簽的字體大小以dp為單位。
setTypeface(Typeface tf):設(shè)置軸標(biāo)簽的自定義Typeface
setGridColor(int color): 設(shè)置這個(gè)軸的網(wǎng)格線顏色。
setGridLineWidth(float width):設(shè)置軸的網(wǎng)格線寬度。
setAxisLineColor(int color):設(shè)置此軸的坐標(biāo)軸的顏色。
setAxisLineWidth(float width): 設(shè)置此軸的坐標(biāo)軸的寬度。
enableGridDashedLine(float lineLength, float spaceLength, float phase): 激活網(wǎng)格線虛線模式,有點(diǎn)像"- - - - - -"。"lineLength"控制短線條的長(zhǎng)度,"spaceLength"控制兩段線之間的間隔長(zhǎng)度,"phase"控制開始的點(diǎn)。

限制線

兩個(gè)軸支持LimitLines的調(diào)用允許呈現(xiàn)專用信息,像邊界或者約束。LimitLines添加到Y(jié)Axis會(huì)在水平方向繪制,垂直方向繪制需要添加到XAxis。下面是你如何增加和移除LimitLines從YAxis:

addLimitLine(LimitLine l): 添加一個(gè)新的LimitLine到軸上。
removeLimitLine(LimitLine l): 從軸上移除一個(gè)指定的LimitLine。 多個(gè)方法也適用于添加或者移除。
setDrawLimitLinesBehindData(boolean enabled): 允許控制Z軸順序在LimitLines和真實(shí)數(shù)據(jù)之間。
如果設(shè)置true,LimitLines繪制在真實(shí)數(shù)據(jù)后面,否則在上面,默認(rèn):false

限制線(類 LimitLine)(也稱為指示線)是明確和簡(jiǎn)單的線能給使用者提供額外的信息。

這是一個(gè)例子,你的圖表可以展示已經(jīng)用應(yīng)用登錄的用戶的多種形式的血壓測(cè)量結(jié)果。為了通知用戶心動(dòng)血壓超過(guò)140mmhg被考慮會(huì)有健康風(fēng)險(xiǎn),你可以增加一個(gè)LimitLine在140處來(lái)提供那條信息。

例子:

  YAxis leftAxis = chart.getAxisLeft();

    LimitLine ll = new LimitLine(140f, "Critical Blood Pressure");
    ll.setLineColor(Color.RED);
    ll.setLineWidth(4f);
    ll.setTextColor(Color.BLACK);
    ll.setTextSize(12f);
    // .. and more styling options

    leftAxis.addLimitLine(ll);

XAxis (XLabels)

這個(gè)XAxis是AxisBase的子類

XAxis類(在2.0.0之前是XLabels),是一切與水平軸相關(guān)的數(shù)據(jù)和信息的容器。每個(gè) Line-, Bar-, Scatter CandleStickChart和 RadarChart 都有一個(gè)XAxis對(duì)象,XAxis將顯為一個(gè)ArrayList 或者 String[]和交給ChartData對(duì)象的是什么。
XAxis類允許對(duì)下面的組件或部分指定具體的樣式:

標(biāo)簽(繪制時(shí)水平對(duì)齊),包括軸的描述值,這些包括提供的數(shù)據(jù)對(duì)象你為圖表設(shè)置的(x軸的值)
坐標(biāo)軸,它直接被繪制平行于標(biāo)簽旁邊。
網(wǎng)格線,每個(gè)來(lái)自垂直方向的標(biāo)簽軸。
為了取得XAxis類的實(shí)例,調(diào)用下面的方法:

    XAxis xAxis = chart.getXAxis();   

自定義軸線的值

setAdjustXLabels(boolean enabled):如果被設(shè)置為true,x軸條目將依賴于它自己在進(jìn)行縮放的時(shí)候。如果設(shè)置為false,x軸條目將總是保持相同。
setAvoidFirstLastClipping(boolean enabled):如果設(shè)置為true,圖表將避免第一個(gè)和最后一個(gè)標(biāo)簽條目被減掉在圖表或屏幕的邊緣。
setSpaceBetweenLabels(int characters): 設(shè)置x軸標(biāo)簽之間的空間字符數(shù),默認(rèn)是4個(gè)。
setPosition(XAxisPosition pos):設(shè)置XAxis應(yīng)該出現(xiàn)的位置。可以選擇TOP,BOTTOM,BOTH_SIDED,TOP_INSIDE或者BOTTOM_INSIDE。

例子:

    XAxis xAxis = chart.getXAxis();
    xAxis.setPosition(XAxisPosition.BOTTOM);
    xAxis.setTextSize(10f);
    xAxis.setTextColor(Color.RED);
    xAxis.setDrawAxisLine(true);
    xAxis.setDrawGridLines(false);
    // and more...

YAxis(YLabels)

YAxis類(在2.0.0之前是Ylabels),是一切與垂直軸相關(guān)的數(shù)據(jù)和信息的容器。每個(gè) Line-, Bar-, Scatter or CandleStickChart都有一個(gè)左和一個(gè)右的YAxis對(duì)象,分別負(fù)責(zé)左邊或者右邊。RadarChart只有一個(gè)YAxis。默認(rèn),圖表的所有軸在被繪制的時(shí)候都被繪制。 YAxis類允許對(duì)下面的組件或部分指定具體的樣式:

標(biāo)簽(繪制時(shí)垂直對(duì)齊),包括軸的描述值。
坐標(biāo)軸,它直接被繪制平行于標(biāo)簽旁邊。
網(wǎng)格線,每個(gè)來(lái)自水平方向的標(biāo)簽軸。
LimitLines,允許呈現(xiàn)具體的信息,像邊框或者限制。

為了取得YAxis類的實(shí)例,調(diào)用下面的方法:

    YAxis leftAxis = chart.getAxisLeft();
    YAxis rightAxis = chart.getAxisRight();
    
    YAxis leftAxis = chart.getAxis(AxisDependency.LEFT);
    
    YAxis yAxis = radarChart.getYAxis(); // this method radarchart only

在運(yùn)行時(shí)刻,使用 public AxisDependency getAxisDependency()來(lái)確定圖表軸呈現(xiàn)的邊。

自定義軸線的值

setStartAtZero(boolean enabled):如果這個(gè)打開,軸線總是有最小值0,無(wú)論什么類型的圖表被展示。
setAxisMaxValue(float max):設(shè)置一個(gè)自定義的最大值為這條軸,如果設(shè)置了,這個(gè)值將不會(huì)依賴于提供的數(shù)據(jù)自動(dòng)計(jì)算。
resetAxisMaxValue(): 調(diào)用這個(gè)將撤銷以前設(shè)置的最大值。這意味著,你將再次允許軸自動(dòng)計(jì)算它的最大值。
setAxisMinValue(float min): 設(shè)置一個(gè)自定義的最小值。如果設(shè)置了,這個(gè)值將不會(huì)依賴于你提供的數(shù)據(jù)進(jìn)行自動(dòng)計(jì)算。
resetAxisMinValue():調(diào)用這個(gè)方法撤銷以前設(shè)置的最小值。這意味著,你將再次允許軸自動(dòng)計(jì)算他的最小值。
setInverted(boolean enabled): 如果設(shè)置為true,這個(gè)軸將被反向,那意味著最高出的將到底部,最低部的到頂端。
setSpaceTop(float percent):設(shè)置在圖表上最高處的值相比軸上最高值的頂端空間(總軸范圍的百分比)
setSpaceBottom(float percent): 設(shè)置在圖表上最低處的值相比軸上最低處值的底部空間(總軸范圍的百分比)
setShowOnlyMinMax(boolean enabled): 如果打開了,這個(gè)軸將展示出它的最小值和最大值。這將忽略或者覆蓋定義過(guò)的label-count。
setPosition(YAxisLabelPosition pos):設(shè)置軸標(biāo)簽應(yīng)該被繪制的位置。INSIDE_CHART或者OUTSIDE_CHART中的一個(gè)。 自定義影響軸的數(shù)值范圍應(yīng)該在圖表被設(shè)置數(shù)據(jù)之前應(yīng)用。

代碼例子:

    YAxis yAxis = mChart.getAxisLeft();
    yAxis .setTypeface(...); // set a different font
    yAxis .setTextSize(12f); // set the textsize
    yAxis.setValueFormatter(new MyValueFormatter());
    //... and more

設(shè)置數(shù)據(jù)

如果你想增加值(數(shù)據(jù))到圖表中,它必須用下面這個(gè)方法。

     public void setData(ChartData data) { ... }       

基類ChartData類封裝了所有的數(shù)據(jù)和信息那是在圖表繪制期間需要的。對(duì)于每種類型的圖表,ChartData的不同的子類(例如LineData)存在應(yīng)該被用來(lái)為圖表設(shè)置數(shù)據(jù)。在構(gòu)造函數(shù)中,你能移交數(shù)據(jù)到ArrayList模板,并且作為值來(lái)顯示,另外字符串的ArrayList將描述在x軸的標(biāo)簽。例如類LineData(繼承自ChartData),用來(lái)增加數(shù)據(jù)到LineChart:

        // this is just one of many constructors
    public LineData(ArrayList<String> xVals, ArrayList<LineDataSet> sets) { ... }

因此,什么是DataSet為什么需要它?那實(shí)際上相當(dāng)簡(jiǎn)單。在圖表內(nèi)互相在一起的數(shù)據(jù)集對(duì)象表示一組條目(數(shù)據(jù)條目類型)。它被設(shè)計(jì)用來(lái)區(qū)分在圖表中邏輯上不同組的值。對(duì)于每種類型的圖表,擴(kuò)展數(shù)據(jù)集 (例如 LineDataSet) 的不同對(duì)象存在允許特定的樣式。 作為一個(gè)例子,你可能想用LineChart展示兩個(gè)不同公司的季度收入在一年中的。在這種情況下,建議你創(chuàng)建兩個(gè)不同的LineDataSet對(duì)象,每個(gè)包含四個(gè)值(每個(gè)代表一個(gè)季度)。用ArrayList來(lái)描述x軸上的標(biāo)簽,你可以簡(jiǎn)單的提供四個(gè)字符串“1.Q”,“2.Q”,“3.Q”,“4.Q"
當(dāng)然,你只提供一個(gè)包含兩個(gè)公司8個(gè)值的LineDataSet對(duì)象也是可以的。

那么怎么設(shè)置一個(gè)LinDataSet對(duì)象呢?

     public LineDataSet(ArrayList<Entry> yVals, String label) { ... }   

在查找構(gòu)造函數(shù)時(shí)(不同的構(gòu)造函數(shù)可用),它是可見的,LinedataSet需要一個(gè)ArrayList條目類型和一個(gè)字符串用來(lái)描述LineDataSet以及用于圖表標(biāo)簽。更進(jìn)一步這個(gè)標(biāo)簽?zāi)鼙挥脕?lái)尋找在LineData對(duì)象中除LineDataSet對(duì)象外的其他LineDataSet。 ArrayList條目類型封裝了圖表的所有值。一個(gè)Entry對(duì)象除了封裝它周圍的值還保存了它自己的值,它的位置在x軸(在LineData對(duì)象的字符串類型的ArrayList里面值的索引被映射):

     public Entry(float val, int xIndex) { ... }

把它們放在一起(例如兩個(gè)公司 一年里的季度收入): 首先,創(chuàng)建Entry的類型的列表保存你的值:

     ArrayList<Entry> valsComp1 = new ArrayList<Entry>();
     ArrayList<Entry> valsComp2 = new ArrayList<Entry>();

然后,填充列表用Entry對(duì)象。確保entry對(duì)象包含正確的x軸的索引(當(dāng)然,一個(gè)循環(huán)能在這兒被使用,在這種情況下,循環(huán)計(jì)數(shù)器可以為x軸的索引)。

    Entry c1e1 = new Entry(100.000f, 0); // 0 == quarter 1
    valsComp1.add(c1e1);
    Entry c1e2 = new Entry(50.000f, 1); // 1 == quarter 2 ...
    valsComp1.add(c1e2);
    // and so on ...

    Entry c2e1 = new Entry(120.000f, 0); // 0 == quarter 1
    valsComp2.add(c2e1);
    Entry c2e2 = new Entry(110.000f, 1); // 1 == quarter 2 ...
    valsComp2.add(c2e2);
    //...    

現(xiàn)在我們有了Entry對(duì)象的列表,LineDataSet對(duì)象可以被創(chuàng)建:

    LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
    LineDataSet setComp2 = new LineDataSet(valsComp2, "Company 2");

但是還沒(méi)完,我們創(chuàng)建一個(gè)DataSets的列表和一個(gè)x軸條目的列表并且構(gòu)建我們的ChartData對(duì)象:

    ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>();
    dataSets.add(setComp1);
    dataSets.add(setComp2);

    ArrayList<String> xVals = new ArrayList<String>();
    xVals.add("1.Q"); xVals.add("2.Q"); xVals.add("3.Q"); xVals.add("4.Q"); 

    LineData data = new LineData(xVals, dataSets);
    mLineChart.setData(data);
    mLineChart.invalidate(); // refresh   

在調(diào)用了invalidate()之后圖表被刷新并且提供的數(shù)據(jù)被繪制。

設(shè)置顏色

自從發(fā)布1.4.0之后,在以前版本中負(fù)責(zé)顏色設(shè)置的ColorTemplate對(duì)象不在需要。然而它依然保存了所有與定義的顏色數(shù)組(例如ColorTemplate.VORDIPLOM_COLORS)并且提供了方便的方法為了從資源(資源整數(shù))轉(zhuǎn)換顏色到真正的顏色。 取代了ColorTemplate,顏色現(xiàn)在能被直接指定在DataSet對(duì)象中,那將允許區(qū)分每種DataSet樣式。

在這個(gè)簡(jiǎn)短的例子中,我們有兩個(gè)不同的LineDataSet對(duì)象來(lái)代表兩家公司的季度收入(在前面設(shè)置數(shù)據(jù)指南中提到的),我們現(xiàn)在想設(shè)置不同的顏色。

我們想做如下:

公司1的值應(yīng)該通過(guò)四個(gè)紅色的不同的變量來(lái)呈現(xiàn)。
公司2的值應(yīng)該通過(guò)四個(gè)綠色的不同的變量來(lái)呈現(xiàn)。

代碼看上去像下面:

  LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
  // sets colors for the dataset, resolution of the resource name to a "real"         color is done internally
  setComp1.setColors(new int[] { R.color.red1, R.color.red2, R.color.red3, R.color.red4 }, Context);

  LineDataSet setComp2 = new LineDataSet(valsComp2, "Company 2");
  setComp2.setColors(new int[] { R.color.green1, R.color.green2, R.color.green3, R.color.green4 }, Context);

除了以上,有許多其他的方法來(lái)給數(shù)據(jù)集設(shè)置顏色。下面是完整的文檔:

setColors(int [] colors, Context c): 設(shè)置顏色應(yīng)該被用在數(shù)據(jù)集前面,只要數(shù)據(jù)集表示的i項(xiàng)數(shù)大于顏色數(shù)組的大小,顏色將被重用。
你能使用"new int[] { R.color.red, R.color.green, ... }" 來(lái)給這個(gè)方法提供顏色。在內(nèi)部,顏色通過(guò)使用getResources().getColor(...)來(lái)獲取。

setColors(int [] colors): 設(shè)置顏色應(yīng)該被用在數(shù)據(jù)集之前,只要數(shù)據(jù)集表示的i項(xiàng)數(shù)大于顏色數(shù)組的大小,顏色將被重用。
確保顏色應(yīng)經(jīng)被準(zhǔn)備好(通過(guò)調(diào)用getResources().getColor(...))在增加它們到數(shù)據(jù)集之前。

setColors(ArrayList colors): 設(shè)置顏色應(yīng)該被用在數(shù)據(jù)集之前,只要數(shù)據(jù)集表示的i項(xiàng)數(shù)大于顏色數(shù)組的大小,顏色將被重用。
確保顏色應(yīng)經(jīng)被準(zhǔn)備好(通過(guò)調(diào)用getResources().getColor(...))在增加它們到數(shù)據(jù)集之前。

setColor(int color): 設(shè)置一種或者唯一一種顏色應(yīng)該被用于這個(gè)數(shù)據(jù)集之前。
在內(nèi)部,這將重新創(chuàng)建顏色數(shù)組并添加指定的顏色。

ColorTemplate例子:

LineDataSet set = new LineDataSet(...);
set.setColors(ColorTemplate.VORDIPLOM_COLORS);

如果沒(méi)有顏色被設(shè)置對(duì)于數(shù)據(jù)集,默認(rèn)顏色被使用

數(shù)據(jù)格式化 這個(gè)ValueFormatter接口可以用來(lái)創(chuàng)建定制格式化程序類允許格式化圖標(biāo)中的數(shù)據(jù)或這Y軸上的數(shù)據(jù)。

使用ValueFormatter僅需要?jiǎng)?chuàng)建一個(gè)新的類和實(shí)現(xiàn)他的接口并且從
getFormattedValue(float value)返回任何你想要顯示的文本。

自定義格式化的例子:

    public class MyValueFormatter implements ValueFormatter {
    
        private DecimalFormat mFormat;
    
        public MyValueFormatter() {
            mFormat = new DecimalFormat("###,###,##0.0"); // use one decimal
        }
    
        @Override
        public String getFormattedValue(float value) {
            return mFormat.format(value) + " $"; // append a dollar-sign
        }
    }

然后設(shè)置你需要格式化的YAxis, ChartData或者DataSet對(duì)象:

    // usage on axis
    yAxis.setValueFormatter(new MyValueFormatter());

    // usage on whole data object
    lineData.setValueFormatter(new MyValueFormatter());

    // usage on individual dataset object
    lineDataSet.setValueFormatter(new MyValueFormatter());

特殊圖表設(shè)置

在章節(jié)1的通用圖標(biāo)設(shè)置和樣式函數(shù)適用于所有之前提及的圖表類型。這個(gè)章節(jié)關(guān)注特殊設(shè)置用于獨(dú)特的圖標(biāo)類型。

餅圖

setDrawSliceText(boolean enabled): 設(shè)置這個(gè)為true是繪制x軸的值文本在餅圖切片上。
setUsePercentValues(boolean enabled): 如果設(shè)置為true,圖標(biāo)顯示數(shù)據(jù)的百分比而不是他們的原始數(shù)據(jù)。
數(shù)據(jù)提供了ValueFormatter情況下會(huì)格式化百分比數(shù)據(jù)。

圖例

默認(rèn),所有的圖表類型支持圖例并且將自動(dòng)生成繪制出圖例在為圖表設(shè)置數(shù)據(jù)之后。圖例通常包含多種條目每個(gè)標(biāo)簽代表一個(gè)形狀。
自動(dòng)生成的圖例包含的項(xiàng)數(shù)取決于不同的顏色 (在所有數(shù)據(jù)集對(duì)象中) 以及數(shù)據(jù)集標(biāo)簽數(shù)目。圖例標(biāo)簽依賴于在圖表中使用的數(shù)據(jù)集對(duì)象設(shè)置的標(biāo)簽。在數(shù)據(jù)集對(duì)象中如果沒(méi)有標(biāo)簽被制定,圖表將自動(dòng)生成它們。如果多種顏色被用在一個(gè)數(shù)據(jù)集中,這些顏色分組并且只被一個(gè)標(biāo)簽描述。
對(duì)于自定義的圖例,你能從圖表中檢索圖例對(duì)象使用getLegend()方法:

Legend legend = chart.getLegend();

控制圖例是否被繪制

setEnabled(boolean enabled): 設(shè)置圖例打開或者關(guān)閉,如果關(guān)閉,圖例將不會(huì)被繪制。

修改圖例樣式

setTextColor(int color): 設(shè)置圖例標(biāo)簽的顏色
setTextSize(float size): 設(shè)置圖例標(biāo)簽字體大小以dp為單位
setTypeface(Typeface tf): 設(shè)置自定義的Typeface對(duì)于圖例標(biāo)簽

自定義圖例

setPosition(LegendPosition pos): 設(shè)置LegendPosition將定義圖例在哪里出現(xiàn)。
可以選擇RIGHT_OF_CHART, RIGHT_OF_CHART_CENTER, RIGHT_OF_CHART_INSIDE, BELOW_CHART_LEFT, BELOW_CHART_RIGHT, BELOW_CHART_CENTER 或者 PIECHART_CENTER(PieChart獨(dú)有),...等等。

setForm(LegendForm shape):設(shè)置LegendForm應(yīng)該被使用。這是旁邊帶有顏色的圖例項(xiàng)表示的數(shù)據(jù)集的圖例標(biāo)簽繪制的形狀。
可以選擇SQUARE, CIRCLE或者LINE.

setFormSize(float size): 設(shè)置圖例形式大小以dp為單位
setXEntrySpace(float space): 在水平軸上的圖例項(xiàng)之間的間距設(shè)置。
setYEntrySpace(float space):垂直軸上的圖例項(xiàng)之間的間距設(shè)置。
setFormToTextSpacefloat space): 設(shè)置圖例標(biāo)簽和相應(yīng)的圖例窗體之間的空間。

例子:

    Legend l = chart.getLegend();
    l.setFormSize(10f); // set the size of the legend forms/shapes
    l.setForm(LegendForm.CIRCLE); // set what type of form/shape should be used
    l.setPosition(LegendPosition.BELOW_CHART_LEFT);
    l.setTypeface(...);
    l.setTextSize(12f);
    l.setTextColor(Color.BLACK);
    l.setXEntrySpace(5f); // set the space between the legend entries on the x-axis
    l.setYEntrySpace(5f); // set the space between the legend entries on the y-axis
    // and many more...

動(dòng)態(tài)和實(shí)時(shí)數(shù)據(jù)

為了動(dòng)態(tài)增加或者移除數(shù)據(jù)到圖表,有多種方法允許你增加或者移除條目對(duì)象到一個(gè)存在的數(shù)據(jù)集或者從數(shù)據(jù)集對(duì)象到一個(gè)存在的ChartData對(duì)象。

類DataSet(和所有的子類):

addEntry(Entry e): 增加給出的條目對(duì)象到DataSet

類ChartData(和所有的子類)

addEntry(Entry e, int dataSetIndex): 增加給的條目到數(shù)據(jù)集,指定了數(shù)據(jù)集索引。
addDataSet(DataSet d): 增加給的DataSet對(duì)象到ChartData對(duì)象

另外也有幾個(gè)方法來(lái)動(dòng)態(tài)的移除數(shù)據(jù)。

類DataSet(和所有的子類):

public boolean removeEntry(Entry e):移除給定的條目對(duì)象從數(shù)據(jù)集中。如果成功返回true
public boolean removeEntry(int xIndex): 移除給定的x索引處的條目從數(shù)據(jù)集中,如果成功返回true

類ChartData(和所有的子類):

public boolean removeEntry(Entry e, int dataSetIndex):移除給定的條目對(duì)象從數(shù)據(jù)集中,指定了數(shù)據(jù)集索引。如果成功返回true。
public boolean removeEntry(int xIndex, int dataSetIndex):從給定的數(shù)據(jù)集索引數(shù)據(jù)集中移除給定的 x 索引處的項(xiàng).如果成功返回true。
public boolean removeDataSet(DataSet d):移除給定的數(shù)據(jù)集對(duì)象從ChartData對(duì)象中。如果成功返回true。
public boolean removeDataSet(int index): 移除給定索引處的數(shù)據(jù)集從ChartData對(duì)象中。如果成功返回true。

修改Viewport

這個(gè)庫(kù)包含各種方法修改視口,請(qǐng)注意這些方法僅適用于LineChart, BarChart, ScatterChart and CandleStickChart。

請(qǐng)注意所有修改視口方法調(diào)需要在圖標(biāo)設(shè)置數(shù)據(jù)之后。

約束顯示什么

setVisibleXRange(float xRange): 設(shè)置區(qū)域的大小(范圍在x軸)。例如設(shè)置了10,沒(méi)有超過(guò)10的值在x軸上可查看不需要滾動(dòng)

setVisibleYRange(float yRange, AxisDependency axis): 設(shè)置區(qū)域的大小(范圍在y軸)。你同樣需要提供軸此約束應(yīng)適用于。

setViewPortOffsets(float left, float top, float right, float bottom):設(shè)定對(duì)當(dāng)前視口的自定義便宜(對(duì)于圖標(biāo)窗口邊的實(shí)際偏移),設(shè)置這個(gè)將防止圖表自動(dòng)計(jì)算他的偏移。使用resetViewPortOffsets()取消這個(gè)設(shè)置。 

resetViewPortOffsets():重置通過(guò)setViewPortOffsets(...)設(shè)置的自定義偏移。允許圖標(biāo)再次自動(dòng)計(jì)算所有偏移。

移動(dòng)視圖

fitScreen(): 重置所有的縮放和拖動(dòng)使圖表完全適合它的邊界。
moveViewToX(float xIndex): 移動(dòng)當(dāng)前視口的左側(cè)(邊緣)到指定的x索引
moveViewToY(float yValue, AxisDependency axis): 中心視口提供的y軸上指定的y值(左側(cè)或右側(cè))。

moveViewTo(float xIndex, float yValue, AxisDependency axis): 這將移動(dòng)當(dāng)前視口的左側(cè)(邊緣)到指定的x索引在x軸上,并且中心視口提供的y軸上指定的y值
(相當(dāng)于結(jié)合了setVisibleXRange(...)和setVisibleYRange(...))

centerViewTo(int xIndex, float yValue, AxisDependency axis): 這會(huì)將當(dāng)前視區(qū)的中心移動(dòng)到指定的x指數(shù)和y值
(相當(dāng)于結(jié)合了setVisibleXRange(...)和 setVisibleYRange(...))

完整例子: chart.setData(...); // first set data

    // now modify viewport
    chart.setVisibleXRange(20); // allow 20 values to be displayed on the x-axis
    chart.moveViewToX(10); // set the left edge of the chart to x-index 10

    // refresh
    chart.invalidate();

動(dòng)畫

注意:動(dòng)畫只能工作在API級(jí)別11(Android 3.0.x)或更高

在低版本Android使用,動(dòng)畫將不執(zhí)行(但是也不崩潰)

所有的圖表類型都支持動(dòng)畫,那能被用來(lái)創(chuàng)建圖表以一種很酷的方式。有三種類型的動(dòng)畫方法存在通過(guò)x軸,y軸或者兩個(gè)軸來(lái)區(qū)分:

animateX(int durationMillis):動(dòng)畫的圖表值在水平軸,意味著圖標(biāo)將在指定的時(shí)間從左到右建立。

animateY(int durationMillis):動(dòng)畫圖表值在y軸,意味著圖表將在指定的時(shí)間內(nèi)從下到上構(gòu)建。

animateXY(int xDuration, int yDuration):動(dòng)畫顯示于水平和垂直的軸上,結(jié)果為左右上下都可以構(gòu)建。

  mChart.animateX(3000); // animate horizontal 3000 milliseconds
  // or:
  mChart.animateY(3000); // animate vertical 3000 milliseconds
  // or:
  mChart.animateXY(3000, 3000); // animate horizontal and vertical 3000 milliseconds

如果animate(...)(任何類)被調(diào)用,不用再調(diào)用invalidate()來(lái)刷新圖表。

動(dòng)畫緩沖

這個(gè)庫(kù)允許你為你的動(dòng)畫使用好的緩沖函數(shù)。你能選著下面預(yù)定義的靜態(tài)Easing.EasingOption

public enum EasingOption {
      Linear,
      EaseInQuad,
      EaseOutQuad,
      EaseInOutQuad,
      EaseInCubic,
      EaseOutCubic,
      EaseInOutCubic,
      EaseInQuart,
      EaseOutQuart,
      EaseInOutQuart,
      EaseInSine,
      EaseOutSine,
      EaseInOutSine,
      EaseInExpo,
      EaseOutExpo,
      EaseInOutExpo,
      EaseInCirc,
      EaseOutCirc,
      EaseInOutCirc,
      EaseInElastic,
      EaseOutElastic,
      EaseInOutElastic,
      EaseInBack,
      EaseOutBack,
      EaseInOutBack,
      EaseInBounce,
      EaseOutBounce,
      EaseInOutBounce,
  }

基本上有兩種緩沖動(dòng)畫:

1、預(yù)定義緩沖動(dòng)畫:(這些代碼可以運(yùn)行在任何安卓版本)

public void animateY(int durationmillis, Easing.EasingOption option); 

使用預(yù)定義緩沖選項(xiàng)調(diào)用任何動(dòng)畫方法

// animate both axes with easing
mChart.animateY(3000, Easing.EasingOption.EaseOutBack); 

在安卓3.0(API Level 11)以下版本總是使用Easing.EasingOption為預(yù)定義緩沖動(dòng)畫。

2、自定義緩沖函數(shù):(自定義緩沖函數(shù)在安卓3.0以下會(huì)崩潰)

public void animateY(int durationmillis, EasingFunction function); 

創(chuàng)建自定義緩沖動(dòng)畫通過(guò)創(chuàng)建你自己的緩沖函數(shù)和實(shí)現(xiàn)EasingFunction接口:

 /**
  * Interface for creating custom made easing functions. 
  */
  public interface EasingFunction {
     /**
      * Called everytime the animation is updated.
      * @param input - the time passed since the animation started (value between 0 and 1)
      */
      public float getInterpolation(float input);
  }

下面是調(diào)用這個(gè)的方法(注意,這個(gè)運(yùn)行在安卓3.0以下會(huì)奔潰)

 // animate both axes with easing
 mChart.animateY(3000, new MyEasingFunction()); 

MarkerView

MakerView類能被任何用戶創(chuàng)建的類擴(kuò)展為了展示自定義的(彈窗)View無(wú)論何時(shí)要在圖表中高亮一個(gè)值。

設(shè)置或者得到marker

setMarkerView(MarkerView mv): 為圖表設(shè)置一個(gè)MarkerView為了展示被選擇的值在哪里。
getMarkerView(): 返回在圖表中被設(shè)置的MarkerView,沒(méi)有就返回null

自定義實(shí)現(xiàn)

下面是一個(gè)看上去比較想MarkerView自定義實(shí)現(xiàn)的例子。比較重要的是你可以根據(jù)以下方法實(shí)現(xiàn)它:

refreshContent(Entry e, int dataSetIndex):每次這個(gè)方法被調(diào)用MarkerView被重新繪制,給你機(jī)會(huì)來(lái)更新它顯示的內(nèi)容(例如為TexView設(shè)置文本)

getXOffset():返回標(biāo)記被繪制位置在x軸上的偏移。默認(rèn)的,標(biāo)記將被繪制在條目位置的左上邊緣。

getYOffset(): 返回標(biāo)記被繪制位置在y軸上的偏移。默認(rèn)的,標(biāo)記將被繪制在條目位置的左上邊緣。

public class CustomMarkerView extends MarkerView {

  private TextView tvContent;

  public CustomMarkerView (Context context, int layoutResource) {
      super(context, layoutResource);
      // this markerview only displays a textview
      tvContent = (TextView) findViewById(R.id.tvContent);
  }

  // callbacks everytime the MarkerView is redrawn, can be used to update the
  // content (user-interface)
  @Override
  public void refreshContent(Entry e, int dataSetIndex) {
      tvContent.setText("" + e.getVal()); // set the entry-value as the display text
  }

  @Override
  public int getXOffset() {
      // this will center the marker-view horizontally
      return -(getWidth() / 2);
  }

  @Override
  public int getYOffset() {
      // this will cause the marker-view to be above the selected value
      return -getHeight();
  }

}
在設(shè)置了自定義的標(biāo)記類之后,創(chuàng)建一個(gè).xml的布局來(lái)呈現(xiàn)你的標(biāo)記。在這個(gè)例子中布局包含一個(gè)帶背景圖片的相對(duì)布局還包含一個(gè)TextView。當(dāng)然你可以創(chuàng)建任何你想到的布局在這里。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:background="@drawable/markerImage" >

    <TextView
        android:id="@+id/tvContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="7dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:text=""
        android:textSize="12dp"
        android:textColor="@android:color/white"
        android:ellipsize="end"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>     

最后,在你創(chuàng)建了你自己的MarkerView之后,在圖表中設(shè)置它。在創(chuàng)建你的MarkerView的時(shí)候,確保你提供了布局資源在你創(chuàng)建的.xml中。

CustomMarkerView mv = new CustomMarkerView (Context, R.layout.custom_marker_view_layout);

// set the marker to the chart
chart.setMarkerView(mv);

ChartData類

這個(gè)維基條目旨在更好地洞察 MPAndroidChart 背后的數(shù)據(jù)模型。 ChartData類是所有數(shù)據(jù)類的基類(子類),像LineData,BarData,...等等。它被用來(lái)為Chart提供數(shù)據(jù)像圖表中的setData()方法。

    public class LineData extends ChartData { ...

下面提到的方法被實(shí)現(xiàn)在ChartData類中,因此也能被用在所有子類中。

數(shù)據(jù)樣式

setValueTextColor(int color):設(shè)置文本值(值標(biāo)簽被繪制的顏色)的顏色為這個(gè)數(shù)據(jù)對(duì)象包含的所有數(shù)據(jù)集。

setValueTextSize(float size): 設(shè)置文本值(以dp為單位)的字體大小為此數(shù)據(jù)對(duì)象所包含的所有數(shù)據(jù)集。

setValueTypeface(Typeface tf): 設(shè)置值標(biāo)簽的字體樣式為此數(shù)據(jù)對(duì)象所包含的所有數(shù)據(jù)集。

setValueFormatter(ValueFormatter f): 設(shè)置自定義的ValueFormatter為此數(shù)據(jù)對(duì)象所包含的所有數(shù)據(jù)集。

setDrawValues(boolean enabled):打開或者關(guān)閉繪制的值(文本值)為此數(shù)據(jù)對(duì)象所包含的所有數(shù)據(jù)集。

Getters/Convenience

getDataSetByIndex(int index):返回在數(shù)據(jù)對(duì)象DataSet列表中給出的索引的數(shù)據(jù)集對(duì)象。

contains(Entry entry):檢查數(shù)據(jù)對(duì)象是否包含指定的條目。如果是返回true,否則返回false。
注意:在這一點(diǎn)上性能并不好,不要過(guò)度使用在性能要求高的的地方。

contains(T dataSet):如果數(shù)據(jù)對(duì)象包含提供的DataSet返回true,否則返回false

clearing

clearValues(): 清除所有DataSet對(duì)象的數(shù)據(jù)對(duì)象因而包括所有條目。不會(huì)刪除提供的x值。

Data類詳情

這個(gè)wiki條目集中于ChartData類的子類。此處未提到的ChartData的所有其他子類不提供任何具體的增強(qiáng)功能。

BarData(類 BarData)

setGroupSpace(float percent): 設(shè)置不同的數(shù)據(jù)集對(duì)象的bars之間的空間占一個(gè)bar的寬度的百分比。100正好是一個(gè)bar的寬度,默認(rèn):80.
isGrouped(): 如果數(shù)據(jù)對(duì)象被分組返回true(包括超過(guò)一個(gè)數(shù)據(jù)集),否則返回false。

ScatterData(類 ScatterData)

getGreatestShapeSize(): 返回所有ScatterDataSets這個(gè)數(shù)據(jù)對(duì)象包含的最大的外形尺寸。

PieData(類 PieData)

getDataSet(): 返回為這個(gè)數(shù)據(jù)對(duì)象設(shè)置的PieDataSet對(duì)象。PieData對(duì)象不  能包含多個(gè)PieDataSets。
setDataSet(PieDataSet set): 設(shè)置PieDataSet這個(gè)數(shù)據(jù)對(duì)象應(yīng)該被呈現(xiàn)。

CombinedData(類 CombinedData)

這個(gè)數(shù)據(jù)對(duì)象被設(shè)計(jì)用來(lái)包含所有其他數(shù)據(jù)對(duì)象的實(shí)例。使用setData()方法來(lái)為這個(gè)對(duì)象提供數(shù)據(jù)。這只能被CombinedChart使用。 里面看上去像下面這樣:

    public class CombinedData extends ChartData {
    
        // ...
    
        public CombinedData(List<String> xVals) { ... }
    
        public CombinedData(String[] xVals) { ... }
    
        public void setData(LineData data) { ... }
    
        public void setData(BarData data) { ... }
    
        public void setData(ScatterData data) { ... }
    
        public void setData(CandleData data) { ... }
    
        // ...
    }

DataSet類

DataSet類是所有data-set類(子類)的基類,像LineDataSet,BarDataSet,...等等。

public class DataSet extends LineDataSet { ...

DataSet類代表一組或者一種類型的條目中關(guān)系比較近的圖表。它被設(shè)計(jì)用來(lái)區(qū)分在圖表中邏輯上不同組的值(例如在LineChart中的具體行的值,或者在BarChart中的具體組的值)。 下面提到的方法被實(shí)現(xiàn)在DataSet類中因此也能被用在其所有的子類中。

數(shù)據(jù)樣式

setValueTextColor(int color):設(shè)置文本值(值標(biāo)簽被繪制的顏色)的顏色為這個(gè)數(shù)據(jù)對(duì)象包含的所有數(shù)據(jù)集。
setValueTextSize(float size): 設(shè)置文本值(以dp為單位)的字體大小為此數(shù)據(jù)對(duì)象所包含的所有數(shù)據(jù)集。
setValueTypeface(Typeface tf): 設(shè)置值標(biāo)簽的字體樣式為此數(shù)據(jù)對(duì)象所包含的所有數(shù)據(jù)集。
setValueFormatter(ValueFormatter f): 設(shè)置自定義的ValueFormatter為此數(shù)據(jù)對(duì)象所包含的所有數(shù)據(jù)集。
setDrawValues(boolean enabled):打開或者關(guān)閉繪制的值(文本值)為此數(shù)據(jù)對(duì)象所包含的所有數(shù)據(jù)集。

如果在整個(gè)數(shù)據(jù)對(duì)象(不是data-set)中有相同的顏色,你可以只調(diào)用上述之一提到的ChartData對(duì)象。

Getters/Convenience

contains(Entry entry):檢查數(shù)據(jù)對(duì)象是否包含指定的條目。如果是返回true,否則返回false。
注意:在這一點(diǎn)上性能并不好,不要過(guò)度使用在性能要求高的的地方。

DataSet類詳細(xì)說(shuō)明

這個(gè)wiki條目集中于DataSet類的子類。此處未提到的ChartData的所有其他子類不提供任何具體的增強(qiáng)功能。

Line-, Bar-, Scatter- & CandleDataSet (下面提到的方法能被用在任何提到的DataSet類中)

setHighLightColor(int color): 設(shè)置用來(lái)高亮顯示的顏色。不要忘記使用        
getResources().getColor(...) 或者Color.rgb(...) (或者簡(jiǎn)單的 Color.BLACK)來(lái)獲取顏色。

Line- & RadarDataSet(只適用于LineDataSet 和 RadarDataSet的方法)

setFillColor(int color): 設(shè)置用來(lái)填充線表面的顏色。

setFillAlpha(int alpha): 設(shè)置阿爾法值(透明度)用來(lái)填充線表面(0-255),默認(rèn):85, 255代表完全不透明,0代表完全透明。

setDrawFilled(boolean filled): 設(shè)置為true,如果數(shù)據(jù)集應(yīng)該被繪制填充(表面,區(qū)域),并不只是作為線,急用這將會(huì)得到極大的性能提升!默認(rèn):false

setLineWidth(float width):設(shè)置線寬為數(shù)據(jù)集(最小值0.2f,最大值10f);默認(rèn)1f 
注意:細(xì)線可以帶來(lái)更好的性能,出線會(huì)有比較差的性能。 下面提到的方法只應(yīng)用于具體提到的DataSet子類。

LineDataSet(類LineDataSet)

setCircleSize(float size): 設(shè)置圓形指標(biāo)線的大小(半徑),默認(rèn)大小為4f

setDrawCircles(boolean enabled):設(shè)置為true為打開繪制圓為L(zhǎng)ineDataSet,默認(rèn)true

setDrawCubic(boolean enabled):如果設(shè)置為true,linechart線被繪制在立方體中,代替linear。這對(duì)性能有負(fù)面影響! 默認(rèn):false

setCubicIntensity(float intensity):為立方線設(shè)置強(qiáng)度(如果打開的話)。最大值1f代表高立方效果,最小值0.05f代表低立方效果。默認(rèn):0.2f

setCircleColor(int color): 為這個(gè)數(shù)據(jù)集應(yīng)該有的所有圓設(shè)置顏色。

setCircleColors(List colors): 為這個(gè)數(shù)據(jù)集的圓外設(shè)置顏色。也有各種各樣的其他方法為設(shè)置愿的顏色。

setCircleColorHole(int color): 設(shè)置圓內(nèi)的顏色(洞內(nèi))

setDrawCircleHole(boolean enabled):設(shè)置這個(gè)為true允許在這個(gè)數(shù)據(jù)集的每個(gè)圓內(nèi)繪制一個(gè)洞。如果設(shè)置為false,圓將被繪制填滿(沒(méi)有洞)

enableDashedLine(float lineLength, float spaceLength, float phase): 在虛線模式下打開線被繪制。
例如像這“----------”“l(fā)ineLength”是部分線的長(zhǎng)度。“spaceLength”是兩個(gè)部分之間的空間。“phase”是偏移,以度為單位(正常情況下,使用0)

BarDataSet(類 BarDataSet)

setBarSpacePercent(float percent):設(shè)置bars之間的空間占bar總寬度的百分比。

setBarShadowColor(int color): 設(shè)置用來(lái)繪制的bar影子的顏色。bar的影子在表面代表在bar后面指示的最大值。不要忘記使用
getResources().getColor(...) 或者Color.rgb(...) (或者簡(jiǎn)單的 Color.BLACK)來(lái)獲取顏色。

setHighLightAlpha(int alpha): 設(shè)置被用來(lái)繪制高亮指示的bar阿爾法值(透明度)。255代表完全不透明,0代表完全透明。

setStackLabels(String[] labels): 設(shè)置標(biāo)簽為bar-stacks的不同的值,在這種情況下有一個(gè)。

ScatterDataSet(類 ScatterDataSet)

setScatterShapeSize(float size): 設(shè)置將要繪制的scattershape的像素的大小,這僅適用于非自定義的形狀。
setScatterShape(ScatterShape shape):設(shè)置圖形被繪制的位置在值出現(xiàn)的地方。

CandleDataSet(類 CandleDataSet)

setBodySpace(float space): 在每個(gè)柱狀的左側(cè)和右側(cè)設(shè)置空間,默認(rèn)0.1f(10%),最大值0.45f, 最小值0f
setShadowWidth(float width):設(shè)置candle-shadow-line的寬度以dp為單位。默認(rèn)3f。

PieDataSet(類 PieDataSet)

setSliceSpace(float degrees): 設(shè)置piechart-slices左側(cè)之間的空間。默認(rèn):0’-->沒(méi)有空間,最大值45,最小值0(沒(méi)有空間)。

setSelectionShift(float shift):設(shè)置距離圖表中心的數(shù)據(jù)集的高亮部分的餅圖的距離,默認(rèn)12f

其他項(xiàng)

圖表內(nèi)容

clear(): 清除圖表的所有數(shù)據(jù)(通過(guò)設(shè)置數(shù)據(jù)對(duì)象為null)。調(diào)用invalidate()來(lái)刷新圖表。
clearValues():清除所有數(shù)據(jù)集對(duì)象的圖表包括所有條目。不會(huì)刪除提供的x值。調(diào)用invalidate()來(lái)刷新圖表。
isEmpty(): 如果圖表數(shù)據(jù)為null返回true,或者如果它沒(méi)有條目。

有用的getter方法

getData():返回你為圖表設(shè)置的數(shù)據(jù)對(duì)象。
getViewPortHandler():返回圖表的ViewPortHandler對(duì)象,它包含一些關(guān)于圖表大小和邊界的信息(偏移,內(nèi)容區(qū)域)。
getRenderer(): 返回負(fù)責(zé)繪制圖表數(shù)據(jù)的主要的DataRenderer
getCenter():返回整個(gè)圖表視圖的中心點(diǎn)。
getCenterOffsets():返回圖表繪圖區(qū)的中心點(diǎn)。
getAverage(): 返回圖表包含的所有值的平均值。
getPercentOfTotal(float value):返回所提供的值在圖表內(nèi)占總和的百分比。
getValueCount(): 返回圖表?yè)碛袛?shù)據(jù)的總數(shù)。
getValueSum(): 返回在圖表內(nèi)所有值的和。
getYMin(): 返回圖表數(shù)據(jù)的最小值。
getYMax(): 返回圖表數(shù)據(jù)的最大值。

一些更多的方法(Chart類的)

saveToGallery(String title):保存當(dāng)前數(shù)據(jù)狀態(tài)作為一張圖片到圖庫(kù)。
saveToPath(String title, String pathOnSD):保存當(dāng)前圖表狀態(tài)作為一張圖片到指定路徑。
getChartBitmap():返回bitmap對(duì)象來(lái)呈現(xiàn)圖表,這個(gè)Bitmap總是包含最新的圖表的繪制狀態(tài)。
setHardwareAccelerationEnabled(boolean enabled): 允許打開或者關(guān)閉硬件加速為圖表,只支持API11以上。

以上內(nèi)容均摘抄至:https://github.com/tuteng/MPAndroidChart
方便大家學(xué)習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,600評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,944評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評(píng)論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,108評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,385評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,616評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,798評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,334評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,570評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,828評(píng)論 18 139
  • MPAndroidChart是一款基于Android的開源圖表庫(kù),MPAndroidChart不僅可以在Andro...
    Code4Android閱讀 23,614評(píng)論 23 66
  • 此頁(yè)面關(guān)注AxisBase類,她是XAxis (XAxis) and YAxis(YAxis)的基類。下面提到的以...
    鹿小純0831閱讀 5,181評(píng)論 2 5
  • 一直想寫點(diǎn)關(guān)于“幸福感”的文字。 直到近日,我花錢報(bào)了個(gè)喜歡的課程。每天都有很多好玩的事情發(fā)生。比如:喜歡攝影的朋...
    寶二姐閱讀 192評(píng)論 0 2
  • 拂曉前,顏清語(yǔ)已悄悄起身梳洗完畢,仿佛搞地下工作似的。最好是趁天沒(méi)亮逃個(gè)影蹤全無(wú),避開所有充滿敵意的眼光。...
    迪蘭熱巴閱讀 199評(píng)論 2 1