MPAndroidChart介紹

開(kāi)始 ####安裝 為了使用 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): 如果打開(kāi)蛉鹿,背景矩形將出現(xiàn)在已經(jīng)畫(huà)好的繪圖區(qū)域的后邊。
setGridBackgroundColor(int color): 設(shè)置網(wǎng)格背景顏色往湿。
setDrawBorders(boolean enabled):打開(kāi)或關(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)方法绒窑。

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

setTouchEnabled(boolean enabled): 允許你打開(kāi)或者關(guān)閉與圖表的所有觸摸交互的情況棕孙。
setDragEnabled(boolean enabled): 打開(kāi)或關(guān)閉對(duì)圖表的拖動(dòng)。
setScaleEnabled(boolean enabled):打開(kāi)或關(guān)閉對(duì)圖表所有軸的的縮放回论。
setScaleXEnabled(boolean enabled): 打開(kāi)或關(guān)閉x軸的縮放
setScaleYEnabled(boolean enabled): 打開(kāi)或關(guān)閉y軸的縮放散罕。
setPinchZoom(boolean enabled): 如果設(shè)置為true分歇,擠壓縮放被打開(kāi)傀蓉。如果設(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)聽(tīng)回調(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è)置軸的打開(kāi)或者關(guān)閉纯续。如果關(guān)閉随珠,坐標(biāo)軸不會(huì)被繪制。
setDrawAxisLine(boolean enabled): 設(shè)置為true猬错,如果線在軸的側(cè)面應(yīng)該被畫(huà)窗看,否則不。
setDrawGridLines(boolean enabled): 設(shè)置為true打開(kāi)繪制網(wǎng)格線對(duì)于軸來(lái)說(shuō)倦炒。
setDrawLabels(boolean enabled):設(shè)置為true打開(kāi)繪制軸的標(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"控制開(kāi)始的點(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è)打開(kāi)牌柄,軸線總是有最小值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): 如果打開(kāi)了秽荤,這個(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ù)可用)楷力,它是可見(jiàn)的,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è)置圖例打開(kāi)或者關(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)畫(huà)

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

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

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

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

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

animateXY(int xDuration, int yDuration):動(dòng)畫(huà)顯示于水平和垂直的軸上,結(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)畫(huà)緩沖

這個(gè)庫(kù)允許你為你的動(dòng)畫(huà)使用好的緩沖函數(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)畫(huà):

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

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

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

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

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

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

public void animateY(int durationmillis, EasingFunction function); 

創(chuàng)建自定義緩沖動(dòng)畫(huà)通過(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)容(例如為T(mén)exView設(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):打開(kāi)或者關(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):打開(kāi)或者關(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為打開(kāi)繪制圓為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)度(如果打開(kāi)的話)掸绞。最大值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): 在虛線模式下打開(kāi)線被繪制。
例如像這“----------”“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): 允許打開(kāi)或者關(guān)閉硬件加速為圖表,只支持API11以上枷踏。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末菩暗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子旭蠕,更是在濱河造成了極大的恐慌停团,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掏熬,死亡現(xiàn)場(chǎng)離奇詭異佑稠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)旗芬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)舌胶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人疮丛,你說(shuō)我怎么就攤上這事幔嫂×舅” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵履恩,是天一觀的道長(zhǎng)锰茉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)切心,這世上最難降的妖魔是什么洞辣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮昙衅,結(jié)果婚禮上扬霜,老公的妹妹穿的比我還像新娘。我一直安慰自己而涉,他們只是感情好著瓶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著啼县,像睡著了一般材原。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上季眷,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天余蟹,我揣著相機(jī)與錄音,去河邊找鬼子刮。 笑死威酒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挺峡。 我是一名探鬼主播葵孤,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橱赠!你這毒婦竟也來(lái)了尤仍?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狭姨,失蹤者是張志新(化名)和其女友劉穎宰啦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饼拍,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赡模,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惕耕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺裁。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欺缘,到底是詐尸還是另有隱情栋豫,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布谚殊,位于F島的核電站丧鸯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嫩絮。R本人自食惡果不足惜丛肢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剿干。 院中可真熱鬧蜂怎,春花似錦、人聲如沸置尔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榜轿。三九已至幽歼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谬盐,已是汗流浹背甸私。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飞傀,地道東北人皇型。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像助析,于是被迫代替她去往敵國(guó)和親犀被。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

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