MPAndroidChart文檔翻譯

開始

添加依賴

在第一步,須要將依賴的庫添加到你的項目中android

建立View

想要使用 LineChart,BarChart,ScatterChart,CandleStickChart,PieChart,BubbleChart或者RadarChart,須要先在xml中定義git

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

而後在你的Activity或者Fragment中獲取控件github

LineChart chart = (LineChart) findViewById(R.id.chart);
複製代碼

或者使用代碼建立,在佈局中添加canvas

LineChart chart = new LineChart(Context);
RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout);
rl.add(chart);
複製代碼

添加數據

在你擁有了圖表的實例以後,你能夠建立數據並添加到圖表中.下面是一個使用折線圖的例子,每一條數據均可以使用Entry這個類來標識x,y座標. 在其餘圖表類型中,好比BarChart使用其餘的類(好比BarEntry)來達到相同的目的.數組

添加數據到圖表中,須要將全部的數據都包裹在Entry對象中bash

YourData[] dataObjects = ...;

List<Entry> entries = new ArrayList<Entry>();

for (YourData data : dataObjects) {
    entries.add(new Entry(data.getValueX(), data.getValueY())); 
}
複製代碼

而後,你須要給你建立的LineDataSet對象添加List數據集合,DataSet對象持有數據,這些數據用戶能夠自定義樣式. 下面的"Label"用於描述數據的做用,若是圖例開啓的話,還會做爲圖例顯示在圖表上網絡

LineDataSet dataSet = new LineDataSet(entries, "Label"); // 添加數據
dataSet.setColor(...);
dataSet.setValueTextColor(...); // 自定義數據樣式
複製代碼

最後一步,你須要把建立好的LineDataSet添加到LineData中,添加完數據,利用Chart的實例去設置數據,而且刷新一下app

LineData lineData = new LineData(dataSet);
chart.setData(lineData);
chart.invalidate(); // 刷新
複製代碼

圖表的交互

這個庫可讓你最大限度的經過手勢觸摸與圖表交互,而且經過回調函數獲取反饋ide

開啓/關閉交互

  • setTouchEnabled(boolean enabled): 容許觸摸圖表
  • setDragEnabled(boolean enabled): 容許拖拽圖表
  • setScaleEnabled(boolean enabled): 容許縮放圖表
  • setScaleXEnabled(boolean enabled): 容許以X軸縮放
  • setScaleYEnabled(boolean enabled): 容許以Y軸縮放
  • setPinchZoom(boolean enabled): 若是爲true則x和y軸將會聯動縮放,不然就分開縮放
  • setDoubleTapToZoomEnabled(boolean enabled): 若容許則能夠雙擊進行縮放

圖表滑動

  • setDragDecelerationEnabled(boolean enabled): 設置爲true,圖表在手指觸碰滑動後,會有慣性繼續運動
  • setDragDecelerationFrictionCoef(float coef): 設置一個在[0,1]區間內的滑動係數,越高的值表明減速會越慢,好比設置爲0,在手指滑動圖表離開後將會當即中止滑動,1是一個不規範的值,它將會被自動設置爲0.9999

手勢操做回調

若是使用手勢操做圖表,可使用OnChartGestureListener來監聽回調函數

public interface OnChartGestureListener {

    //當手指剛觸摸到圖表時觸發,action_down
    void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture);

    //當手指在圖表上操做結束時調用,action_up、action_cancel
    void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture);

    //長按圖表回調
    public void onChartLongPressed(MotionEvent me);

    //雙擊圖表回調
    public void onChartDoubleTapped(MotionEvent me);

    //單擊圖表回調
    public void onChartSingleTapped(MotionEvent me);

    //滑動圖表回調
    public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY);

    //縮放圖表回調
    public void onChartScale(MotionEvent me, float scaleX, float scaleY);

    //拖拽圖表回調
    public void onChartTranslate(MotionEvent me, float dX, float dY);
}
複製代碼

將你的Chart去設置手勢監聽器就能夠實現這些回調

chart.setOnChartGestureListener(this);
複製代碼

高亮顯示

開啓/關閉高亮

  • setHighlightPerDragEnabled(boolean enabled): 設置爲true時,在圖表徹底縮小的狀況下,拖拽圖表能夠高亮,默認爲true
  • setHighlightPerTapEnabled(boolean enabled): 設置爲false時,圖表將不會由於手勢而高亮,拖拽和代碼操做依舊能夠觸發高亮,默認爲true
  • setMaxHighlightDistance(float distanceDp): 設置觸發能夠高亮的最遠距離,觸摸點離圖表過遠時,將不會觸發高亮

高亮樣式能夠由我的自定義

dataSet.setHighlightEnabled(true); // 是否容許高亮
dataSet.setDrawHighlightIndicators(true); // 設置是否有拖拽高亮指示器
dataSet.setHighlightColor(Color.BLACK); // 設置高亮顏色
複製代碼

代碼高亮數據

  • highlightValue(float x, int dataSetIndex, boolean callListener): 經過給的在dataset中的x位置,去高亮數據.dataSetIndex給-1時,將會禁止一切高亮,布爾值的callListener標識是否容許監聽回調
  • highlightValue(Highlight high, boolean callListener): 經過傳遞來的Highlight對象去高亮數據,hightlight對象傳null時表示不高亮,布爾值的callListener標識是否容許監聽回調
  • highlightValues(Highlight[] highs): 傳入一個Highlight[]數組以同時高亮多個條目,數組爲空或者null時表示不進行高亮
  • getHighlighted(): 返回一個Highlight[]數組,裏面包含高亮的條目,x軸位置以及在dataset中的位置

選擇回調

OnChartValueSelectedListener,經過觸摸高亮數據時的回調

public interface OnChartValueSelectedListener {
    
    //當圖表內的一項被選中時的回調
    public void onValueSelected(Entry e, Highlight h);
    
    //當沒有選擇項時的回調
    public void onNothingSelected();
}
複製代碼

Highlight類

Highlight類,一般被用於獲取高亮條目的信息,或者用來給圖表或者Entry對提供數據用於高亮,Highlight類提供兩個構造函數

//標準的Highlight構造函數
 public Highlight(float x, int dataSetIndex) { ... }

 //給BarEntry使用的Highlight構造函數
 public Highlight(float x, int dataSetIndex, int stackIndex) { ... }
複製代碼

一個經過代碼方式利用Highlight進行高亮的例子

// highlight the entry and x-position 50 in the first (0) DataSet
Highlight highlight = new Highlight(50f, 0); 

chart.highlightValue(highlight, false); // highlight this value, don't call listener 複製代碼

自定義高亮

全部用戶輸入的手勢高亮形式都是由默認的ChartHighlighter類完成的,經過自定義ChartHighlighter類的實現來替換默認的,完成更多的不一樣的高亮形式 setHighlighter(ChartHighlighter highlighter): 傳入自定義的ChartHighlighter實現類對象來完成高亮樣式的設置

座標軸

座標軸類經過如下部分實現具體的樣式

  • Label 繪製在座標軸旁,包含座標軸的詳細數據
  • axis-line 座標軸線
  • grid-lines 橫向的表格線
  • LimitLines 限制線用於呈現一些特殊的信息,像邊界、約束等

控制座標軸的哪些部分能夠被繪製

  • setEnabled(boolean enabled): 座標軸開關,設置爲false時,不論其餘設置怎樣都不會再繪製座標軸
  • setDrawLabels(boolean enabled): 座標值開關,設置爲false時將不會繪製座標值
  • setDrawAxisLine(boolean enabled): 座標線開關,設置爲false時將不會繪製座標線
  • setDrawGridLines(boolean enabled): 表格背景線開關,設置爲false時將不會繪製圖表背景上的表格線

定製座標軸的範圍(最小/最大)

  • setAxisMaximum(float max): 設置座標軸的最大值,一旦設置將不會再自動按照提供的值進行計算
  • resetAxisMaximum(): 恢復默認設置,本身設置的最大值將再也不生效,仍有提供的數據進行自動計算獲得
  • setAxisMinimum(float min): 設置座標軸的最小值,一旦設置將不會再自動按照提供的值進行計算
  • resetAxisMinimum(): 恢復默認設置,本身設置的最小值將再也不生效,仍有提供的數據進行自動計算獲得
  • setInverted(boolean enabled): 倒置高低值,大值將會在底部出現,小值將會在頂部出現
  • setSpaceTop(float percent): 設置距頂部的間距(佔總軸的範圍的百分比)
  • setSpaceBottom(float percent): 設置距底部的間距(佔總軸的範圍的百分比)
  • setShowOnlyMinMax(boolean enabled): 若是設置爲true,將會只顯示最小值和最大值,中間的數據將會忽略掉不顯示(若是不是強制顯示的話)
  • setLabelCount(int count, boolean force): 設置y軸標籤數,這個數字不是固定的除非force設置爲true,若是force設置爲true會精確繪製座標值標籤數,致使軸上數字不均勻
  • setPosition(YAxisLabelPosition pos): 設置縱軸座標值的繪製位置(圖表內側或者圖表外側 --- INSIDE_CHART or OUTSIDE_CHART)
  • setGranularity(float gran): 設置y軸的最小間距,用於避免縮放到最小時,座標軸上數據相互重疊
  • setGranularityEnabled(boolean enabled): 能夠在縮放時限制y軸間距,默認false

定製座標軸樣式

  • setTextColor(int color): 設置座標軸值標籤的顏色
  • setTextSize(float size): 設置座標軸值標籤的字體的大小
  • setTypeface(Typeface tf): 給座標軸值標籤設置一個字體
  • setGridColor(int color): 設置背景表格線的顏色
  • setGridLineWidth(float width): 設置背景表格線的寬度
  • setAxisLineColor(int color): 設置座標軸線的顏色
  • setAxisLineWidth(float width): 設置座標軸線的寬度
  • enableGridDashedLine(float lineLength, float spaceLength, float phase): 讓背景表格線變成虛線模式就像 - - - - - 的樣子,lineLength控制實線長度,spaceLength控制虛線長度,phase控制起始點

對座標軸值進行格式化

可使用IAxisValueFormatter接口來格式化座標軸數據,使用axis.setValueFormatter(IAxisValueFormatter formatter)設置本身的定製數據格式

限制線

像邊界線和約束線這種用於表示特殊信息的線咱們稱之爲限制線,限制線在Y軸上橫向呈現,在X軸上縱向呈現

  • addLimitLine(LimitLine l): 向座標軸上添加一條新的限制線
  • removeLimitLine(LimitLine l): 從座標軸上移除一條限制線
  • setDrawLimitLinesBehindData(boolean enabled): 容許設置限制線和數據標籤的圖層順序,爲true的話限制線將繪製在數據的後面,不然繪製在前面,默認爲false

限制線顧名思義是給用戶提供格外信息的一種簡潔、簡單的線

例如,您的圖表可能會顯示用戶的各類血壓測量結果.爲了通知用戶,收縮壓超過140毫米汞柱被認爲是健康風險,你能夠在140添加一個限制線來提供這些信息

YAxis leftAxis = chart.getAxisLeft();

LimitLine ll = new LimitLine(140f, "健康的血壓線");
ll.setLineColor(Color.RED);
ll.setLineWidth(4f);
ll.setTextColor(Color.BLACK);
ll.setTextSize(12f);
// .. 更多的樣式設置

leftAxis.addLimitLine(ll);
複製代碼

X軸

任何與橫軸有關的數據信息都存放在X軸中,像折線圖、柱狀圖、網狀圖、蠟燭圖、雷達圖等都有XAxis對象

獲取X軸實例對象使用

XAxis xAxis = chart.getXAxis();
複製代碼

定製座標軸數據

  • setLabelRotationAngle(float angle): 設置X軸標籤數據繪製的角度
  • setPosition(XAxisPosition pos): 設置標籤數據繪製的位置,能夠選擇如下的項:TOP,BOTTOM,BOTH_SIDED,TOP_INSIDE or BOTTOM_INSIDE.

示例代碼

XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);
xAxis.setTextSize(10f);
xAxis.setTextColor(Color.RED);
xAxis.setDrawAxisLine(true);
xAxis.setDrawGridLines(false);
// 設置定製的數據格式
xAxis.setValueFormatter(new MyCustomFormatter()); 
複製代碼

Y軸

任何與縱軸有關的數據信息都存放在Y軸中,像折線圖、柱狀圖、網狀圖、蠟燭圖等都有左右兩個YAxis對象,雷達圖只有一個YAxis對象

獲取YAxis實例對象

YAxis leftAxis = chart.getAxisLeft();
YAxis rightAxis = chart.getAxisRight();

YAxis leftAxis = chart.getAxis(AxisDependency.LEFT);

YAxis yAxis = radarChart.getYAxis(); // 雷達圖獲取YAxis方法
複製代碼

在運行時,可使用public AxisDependency getAxisDependency()來肯定YAxis是圖表的哪一邊的 想要設置效果必須在給圖表設置數據以前

Axis Dependency

默認狀況下,全部添加到圖表的數據都和左邊的Y軸數據相對應,沒有進一步設置的狀況下右邊的Y軸數據以及樣式比例均與左邊統一,若是你想要設置不一樣比例的Y軸,你能夠經過設置對應的數據來繪製對應的座標軸實現

LineDataSet dataSet = ...; // 獲取dataset
dataSet.setAxisDependency(AxisDependency.RIGHT);
複製代碼

零線

除了網格線與YAxis上的每一個值水平並排,還有所謂的零線,它在軸上的零(0)值處繪製,相似於網格線,但能夠單獨配置。

  • setDrawZeroLine(boolean enabled): 是否繪製零線
  • setZeroLineWidth(float width): 設置零線寬度
  • setZeroLineColor(int color): 設置零線顏色

零線代碼示例:

// 數據設置在左邊座標軸
YAxis left = mChart.getAxisLeft();
left.setDrawLabels(false); // 不設置座標軸數據標籤
left.setDrawAxisLine(false); // 不繪製座標軸線
left.setDrawGridLines(false); // 不繪製網格線
left.setDrawZeroLine(true); // 繪製零線
mChart.getAxisRight().setEnabled(false); // 不設置右邊Y軸
複製代碼

0line
0line
沒有其餘的線(座標軸線、網格線等等)只有一條零線的效果

更多的代碼示例:

YAxis yAxis = mChart.getAxisLeft();
yAxis.setTypeface(...); // 設置一個不一樣的字體
yAxis.setTextSize(12f); // 設置字體大小
yAxis.setAxisMinimum(0f); // 設置座標軸從0開始
yAxis.setAxisMaximum(100f); // 設置座標軸最大值爲100
yAxis.setTextColor(Color.BLACK); // 設置字體顏色爲黑色
yAxis.setValueFormatter(new MyValueFormatter());
yAxis.setGranularity(1f); // 設置間隔爲1
yAxis.setLabelCount(6, true); // 設置標籤個數
//... 更多
複製代碼

設置數據

折線圖

若是想要給圖表添加數據須要使用如下方式:

public void setData(ChartData data) { ... }
複製代碼

基類CharData包含在渲染時圖表所須要的全部的數據和信息 對於每一種數據圖表,都有一個CharData的子類用於給圖表設置數據

在構造函數中,可使用List<? extends IDataSet>做爲數據去顯示,

兩種不一樣的構造函數

/** List constructor */
    public LineData(List<ILineDataSet> sets) { ... }

    /** Constructor with one or multiple ILineDataSet objects */
    public LineData(ILineDataSet...) { ... }
複製代碼

一個DataSet對象表明一組圖表中一塊兒的數據,這樣能夠在邏輯上分離圖表上的不一樣組數據. 對於每種類型的圖表,存在容許特定樣式的擴展DataSet的不一樣對象(例如Line DataSet)

舉個例子,若是你想要顯示兩家不一樣公司上一年季度性的財政收入,推薦使用兩個LineDataSet,每個中包含四組數據 那麼如何去設置LineDataSet對象呢

public LineDataSet(List<Entry> entries,String label){...}
複製代碼

能夠看到,LineDataSet的構造函數中須要List一系列的數據以及用於描述數據信息的label, 此label還能夠進一步在LineData中去找到對應的LineDataSet對象 這些Entry的列表中包含了圖表的全部數據,而Entry類就至關於X、Y座標值的一個包裝類,用於存放一個具體的座標值

public Entry(float x, float y) { ... }
複製代碼

上面的例子,咱們第一步能夠建立一個用於存放公司收入的Entry的集合

List<Entry> valsComp1 = new ArrayList<Entry>();
List<Entry> valsComp2 = new ArrayList<Entry>();
複製代碼

而後填充數據,確保Entry內的X軸數據是精確的

Entry c1e1 = new Entry(0f, 100000f); // 一公司第一季度數據
    valsComp1.add(c1e1);
    Entry c1e2 = new Entry(1f, 140000f); // 一公司第二季度數據
    valsComp1.add(c1e2);
    // 繼續添加
    
    Entry c2e1 = new Entry(0f, 130000f); // 二公司第一季度數據
    valsComp2.add(c2e1);
    Entry c2e2 = new Entry(1f, 115000f); // 二公司第二季度數據
    valsComp2.add(c2e2);
    //...
複製代碼

如今咱們能夠經過這一系列數據去建立LineDataSet對象

LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
    setComp1.setAxisDependency(AxisDependency.LEFT);
    LineDataSet setComp2 = new LineDataSet(valsComp2, "Company 2");
    setComp2.setAxisDependency(AxisDependency.LEFT);
複製代碼

經過使用setAxisDependency來指定具體數據繪製的軸,而後經過建立IDataSets的List來構成ChartData對象

// 使用ILineDataSet接口
    List<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
    dataSets.add(setComp1);
    dataSets.add(setComp2);
    
    LineData data = new LineData(dataSets);
    mLineChart.setData(data);
    mLineChart.invalidate(); // 刷新
複製代碼

在調用invalidate方法刷新後,數據就會被繪製出來

若是咱們想特別定製X軸數據來替換原先的0到3,咱們可使用IAxisValueFormatter接口 這個接口可讓咱們自定義X軸數據顯示樣式 舉個例子,像如下這樣設置數據格式:

// 繪製在X軸上的數據數組
final String[] quarters = new String[] { "Q1", "Q2", "Q3", "Q4" };

IAxisValueFormatter formatter = new IAxisValueFormatter() {

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return quarters[(int) value];
    }

    @Override
    public int getDecimalDigits() {  return 0; }
};

XAxis xAxis = mLineChart.getXAxis();
xAxis.setGranularity(1f); // 最小的間隔設置爲1
xAxis.setValueFormatter(formatter);
複製代碼

最後渲染的圖表的樣子

Formatter
Formatter

BarChart,ScatterChart,BubbleChart和CandleStickChart的設置數據與LineChart同樣 其中特殊的是BarChart將會在下面進行解釋:

數據排序

若是List沒有正確的X軸排列順序,可能致使一些意外的狀況 咱們可使用EntryXComparator來進行排序

List<Entry> entries = ...;
Collections.sort(entries, new EntryXComparator());
複製代碼

柱狀圖

柱狀圖的設置數據方式與折線圖相似,最大的不一樣在於柱狀圖存放數據的BarEntry有一些不一樣的樣式設置

建立BarDataSet

List<BarEntry> entries = new ArrayList<>();
entries.add(new BarEntry(0f, 30f));
entries.add(new BarEntry(1f, 80f));
entries.add(new BarEntry(2f, 60f));
entries.add(new BarEntry(3f, 50f)); 
                                    // 跳過第五個
entries.add(new BarEntry(5f, 70f));
entries.add(new BarEntry(6f, 60f));

BarDataSet set = new BarDataSet(entries, "BarDataSet");
複製代碼

將數據設置到圖表上

BarData data = new BarData(set);
data.setBarWidth(0.9f); // 設置數據條的寬度
chart.setData(data);
chart.setFitBars(true); // 讓X軸與全部的數據條適配
chart.invalidate(); // 刷新
複製代碼

當柱狀圖被建立時,每個條都有1f的寬度,設置爲0.9f的寬度後,將會在兩個條各存在0.1f的間隔 設置setFitBars(true)將會讓X軸的範圍很好的適配柱狀圖,而不會出現有哪一個條被邊緣線切斷

刷新後顯示:

barChart
barChart

羣組柱狀圖

YourData[] group1 = ...;
YourData[] group2 = ...;

List<BarEntry> entriesGroup1 = new ArrayList<>();
List<BarEntry> entriesGroup2 = new ArrayList<>();

// 填充數據
for(int i = 0; i < group1.length; i++) {
    entriesGroup1.add(new BarEntry(i, group1.getValue()));
    entriesGroup2.add(new BarEntry(i, group2.getValue()));
}

//兩組數據
BarDataSet set1 = new BarDataSet(entriesGroup1, "Group 1");
BarDataSet set2 = new BarDataSet(entriesGroup2, "Group 2");
複製代碼

這樣就獲取到兩組數據,如今用這兩組數據去完成羣組柱狀圖

float groupSpace = 0.06f; //羣組間的間隔
float barSpace = 0.02f; // 每個柱狀條間隔
float barWidth = 0.45f; // 每個柱狀條的寬度
// (0.02 + 0.45) * 2 + 0.06 = 1.00 -> 總共合起來仍是1f

BarData data = new BarData(set1, set2); //設置組數據
data.setBarWidth(barWidth); // 設置柱狀條寬度
barChart.setData(data);
barChart.groupBars(1980f, groupSpace, barSpace); // 設置組樣式寬度等
barChart.invalidate(); // 刷新
複製代碼

groupBars(...)對羣組數據進行了具體的設置,這個方法的具體參數

public void groupBars(float fromX, float groupSpace, float barSpace) { ... }
複製代碼

fromX標識X軸數據從哪邊開始進行渲染

最後渲染出來爲:

group_bar_chart
group_bar_chart

經過使用setCenterAxisLabels(...)方法可讓標籤數據正確顯示在羣組柱狀條中間

XAxis xAxis = chart.getXAxis();
xAxis.setCenterAxisLabels(true);
複製代碼

疊加柱狀圖

設置與普通的柱狀圖相似,不一樣的是BarEntry的構造函數使用

public BarEntry(float x, float [] yValues) { ... }
複製代碼

第二個參數是一個疊加的數據值數組

BarEntry stackedEntry = new BarEntry(0f, new float[] { 10, 20, 30 });
複製代碼

這樣在圖表上顯示高度爲10,20,30的三段數據

餅圖

不一樣於其餘的圖形,餅圖的構造函數是這樣的:

public PieEntry(float value, String label) { ... }
複製代碼

第一個參數便是當前所佔區域的大小數據,第二個參數用於描述當前區域的信息

完整的餅圖的建立

List<PieEntry> entries = new ArrayList<>();

entries.add(new PieEntry(18.5f, "Green"));
entries.add(new PieEntry(26.7f, "Yellow"));
entries.add(new PieEntry(24.0f, "Red"));
entries.add(new PieEntry(30.8f, "Blue"));

PieDataSet set = new PieDataSet(entries, "Election Results");
PieData data = new PieData(set);
pieChart.setData(data);
pieChart.invalidate(); // 刷新
複製代碼

餅圖沒有X軸,數據的顯示順序由添加順序來定義 渲染完成後:

pie_chart
pie_chart

設置顏色

在這個小例子中咱們有兩組數據用於表明兩個公司季度收入,咱們想要設置不一樣的顏色去區分它們 咱們想要:

  • Company1使用四種不一樣的紅色去標註四個不一樣的季度數據
  • Company2使用四種不一樣的綠色去標註四個不一樣的季度數據
LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
  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);
複製代碼

給DataSet設置顏色的方法

  • setColors(int [] colors, Context c): 經過使用 new Int[]{R.color.red,...}的形式給dataset提供顏色數據
  • setColors(int [] colors):經過使用 new Int[]{R.color.red,...}的形式給dataset提供顏色數據,必須確保在調用以前顏色都是可用的
  • setColors(ArrayList colors): 提供List類型的顏色集合,必須確保在調用以前顏色都是可用的
  • setColor(int color): 設置單一的顏色,在內部仍是建立數組並添加這個顏色

固然也可使用顏色模板

LineDataSet set = new LineDataSet(...);
set.setColors(ColorTemplate.VORDIPLOM_COLORS);
複製代碼

在沒有設置顏色的時候,將會使用默認的顏色

ValueFormatter接口

IValueFormatter接口用於建立自定義格式類來在圖表繪製以前格式數據 使用IValueFormatter,簡單的建立一個類去實現這個接口,並返回你從getFormattedValue(...)方法獲取的數據想要顯示的樣子

建立一個格式化類

public class MyValueFormatter implements IValueFormatter {

    private DecimalFormat mFormat;
    
    public MyValueFormatter() {
        mFormat = new DecimalFormat("###,###,##0.0"); // 使用金融類型的格式
    }
    
    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        // 寫下你的代碼邏輯
        return mFormat.format(value) + " $"; // 好比在數據前添加一個$符
    }
}
複製代碼

給ChartData或者DataSet添加格式化

// 圖表內的數據均使用這種格式
lineData.setValueFormatter(new MyValueFormatter());

// 僅在該DataSet內使用這種格式
lineDataSet.setValueFormatter(new MyValueFormatter());
複製代碼

預置格式類

  • LargeValueFormatter: 用於格式化大數據 超過"1,000"的值將會被格式化爲"1K",超過"1,000,000"將會變成"1M",超過"1,000,000,000"將會變成"1M",而且像one trillion這樣的數據將會被格式成"1t".
  • PercentFormatter: 使用百分比修飾數據在餅圖中頗有用. 50 -> 50.0 %
  • StackedValueFormatter: 用於層疊柱狀圖中,用於格式數據是不是顯示多層數據仍是僅僅只顯示最頂部的數據

AxisValueFormatter接口

建立一個格式化類

建立一個類實現IAxisValueFormatter接口,用於格式化座標軸上的值

public class MyYAxisValueFormatter implements IAxisValueFormatter {

    private DecimalFormat mFormat;

    public MyAxisValueFormatter() {
        //格式化數字
        mFormat = new DecimalFormat("###,###,##0.0");
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        // value參數標識在座標軸上的位置或者說是數據值,axis標識是哪一個座標軸
        return mFormat.format(value) + " $";
    }
    
    /** 只有爲數字時返回 其他返回0*/
    @Override
    public int getDecimalDigits() { return 1; }
}
複製代碼

下面的例子展現怎麼把數組中的數據展現到座標軸上去

public class MyXAxisValueFormatter implements IAxisValueFormatter {

    private String[] mValues;

    public MyXAxisValueFormatter(String[] values) {
        this.mValues = values;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return mValues[(int) value];
    }
    
    @Override
    public int getDecimalDigits() { return 0; }
}
複製代碼

設置格式化類

在建立好格式化類以後,簡單去運用它

YAxis left = chart.getAxisLeft();
left.setValueFormatter(new MyYAxisValueFormatter());
String[] values = new String[] { ... };
XAxis xAxis = chart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter(values));
複製代碼

設置完以後,圖表用格式化類來具體指定值來代替默認的座標軸的最小值和最大值範圍

限制間隔

若是使用上面的數組格式化座標軸標籤值,可使用一下的代碼去限制標籤間的間隔

axis.setGranularity(1f);
複製代碼

這將能夠預防座標軸繪製重疊的數據,由於在縮放到必定的程度時,圖表將會中止計算更小的標籤範圍

預置格式化類

  • LargeValueFormatter: 用於格式化大數據 超過"1,000"的值將會被格式化爲"1K",超過"1,000,000"將會變成"1M",超過"1,000,000,000"將會變成"1M",而且像one trillion這樣的數據將會被格式成"1t".
  • PercentFormatter: 使用百分比修飾數據在餅圖中頗有用. 50 -> 50.0 %

通用圖表和樣式設置

刷新

  • invalidate(): 使用這個方法刷新圖表將會從新繪製,更改圖表後想要生效必須調用
  • notifyDataSetChanged(): 讓圖表知道依賴的數據發生變化時調用,調用後圖表會從新計算,在使用動態數據時頗有用

日誌

  • setLogEnabled(boolean enabled): 設置爲true時將會打印日誌信息,可是打開將會影響性能因此不是必要的話請關閉

大致的樣式設置

下面是一些能夠直接在Chart上使用的樣式設置方法

  • setBackgroundColor(int color): 設置整個圖表的背景顏色,也能夠在.xml佈局文件中進行設置
  • setDescription(String desc): 在圖表的右下角設置一個圖表描述標註
  • setDescriptionColor(int color): 設置圖表描述的字體顏色
  • setDescriptionPosition(float x, float y): 設置圖表描述的顯示位置
  • setDescriptionTypeface(Typeface t): 設置圖表描述的字體樣式
  • setDescriptionTextSize(float size): 設置圖表描述的字體大小,經過像素值設置或者使用min(6f)、max(16f)
  • setNoDataText(String text): 若是圖表沒有數據時顯示的標註
  • setDrawGridBackground(boolean enabled): 若是開啓的話,圖表繪製區域背後的矩形區域將會被繪製
  • setGridBackgroundColor(int color): 設置背景矩形的顏色
  • setDrawBorders(boolean enabled): 設置是否繪製圖表邊框
  • setBorderColor(int color): 設置邊框顏色
  • setBorderWidth(float width): 設置邊框線寬,單位爲dp
  • setMaxVisibleValueCount(int count): 設置圖表可見數據標籤的最大個數,只有當setDrawValues()開啓時生效

具體的圖表和樣式設置

Line-, Bar-, Scatter-, Candle- & BubbleChart

  • setAutoScaleMinMaxEnabled(boolean enabled): 根據最大最小數據值圖表進行自動縮放,在展現金融類型的數據時頗有趣,默認關閉
  • setKeepPositionOnRotation(boolean enabled): 設置在轉變方向時(橫屏豎屏),圖表的縮放滾動不發生改變,默認關閉

BarChart

  • setDrawValueAboveBar(boolean enabled): 設置爲true時,數據將會被渲染在數據條上方,而不是在頂部的下方顯示
  • setDrawBarShadow(boolean enabled): 設置爲true時,將會在數據條背後根據最大值繪製陰影,可是開啓將會下降大概40%的性能
  • setDrawValuesForWholeStack(boolean enabled): 若是設置爲true,堆疊條的全部值都會單獨繪製,而不只僅是繪製它們的總和。
  • setDrawHighlightArrow(boolean enabled): 設置爲true時將會在數據高亮時,在數據條上方高亮繪製箭頭

PieChart

  • setDrawSliceText(boolean enabled): 設置爲true,將會在餅圖片內繪製文字
  • setUsePercentValues(boolean enabled): 當開啓時,將不會使用原來的數據值,而是百分比格式過獲得的百分比數據
  • setCenterText(SpannableString text): 設置爲true時文字將會在圖表中間繪製,過長的文字將會被自動縮略以避免繪製到餅圖片上
  • setCenterTextRadiusPercent(float percent): 設置中心文本邊界框的矩形半徑,做爲餅圖孔的百分比,默認值1.f(100%)
  • setHoleRadius(float percent): 以最大半徑的百分比(最大半徑=整個圖表的半徑)來設置餅圖中心的孔半徑,默認爲50%
  • setTransparentCircleRadius(float percent): 設置餅圖中孔旁邊的透明圓的半徑,以最大半徑的百分比表示(最大半徑=整個圖表的半徑),默認爲55%->默認狀況下比中心孔大5%
  • setTransparentCircleColor(int color): 設置透明圓的顏色
  • setTransparentCircleAlpha(int alpha): 設置透明圓的透明度
  • setMaxAngle(float maxangle): 設置餅圖的角度. 360f意味着是一個整圓的餅圖,180f就是一個半圓的餅圖.默認值360f

RadarChart

  • setSkipWebLineCount(int count): 容許跳過繪製來自圖表中心的網絡線,在線特別多的狀況下頗有用

圖例

圖例一般有一個標識和一字符串組成,標識爲表明該數據的DataSet的顏色決定,字符串是DataSet的描述

獲取圖例對象

Legend legend = chart.getLegend();
複製代碼
  • setEnabled(boolean enabled): 設置圖例是否被繪製

設置圖例的樣式

  • setTextColor(int color): 設置圖例上的字體顏色
  • setTextSize(float size): 設置圖例字體大小
  • setTypeface(Typeface tf): 設置圖例字體

大小

  • setWordWrapEnabled(boolean enabled): 若是啓用,圖例的內容將不會剪切到圖表邊界外,而是建立一個新的線條即換行.請注意,這會下降性能,僅適用於圖表下面的圖例
  • setMaxSizePercent(float maxSize): 設置圖表相對於View的最大相對大小,默認爲0.95即95%

自定義圖例

  • setPosition(LegendPosition pos): 設置圖例要顯示的位置. 能夠設置這些值:RIGHT_OF_CHART,RIGHT_OF_CHART_CENTER,RIGHT_OF_CHART_INSIDE,BELOW_CHART_LEFT,BELOW_CHART_RIGHT,BELOW_CHART_CENTER or PIECHART_CENTER(只有餅圖有)等等更多
  • setForm(LegendForm shape): 設置圖例顯示的樣式能夠選擇SQUARE(方形圖例),CIRCLE(圓形圖例) or LINE(線型圖例).
  • setFormSize(float size): 設置圖例大小
  • setXEntrySpace(float space): 設置若是在X軸上的圖例的間距
  • setYEntrySpace(float space): 設置若是在Y軸上的圖例的間距
  • setFormToTextSpace(float space): 設置圖例上圖示和文字之間的間距

設置自定義的標籤

  • setCustom(int[] colors, String[] labels): 自定義標籤顏色和文字內容,兩個數組的大小必須相等
  • resetCustom():將會重置圖例標籤,根據默認的自動計算獲得默認的圖例標籤
  • setExtra(int[] colors, String[] labels): 給默認顯示的圖例增長新的內容,若是默認內容已經計算完畢,須要調用notifyDataSetChanged()來生效

例子

Legend l = chart.getLegend();
    l.setFormSize(10f); 
    l.setForm(LegendForm.CIRCLE); 
    l.setPosition(LegendPosition.BELOW_CHART_LEFT);
    l.setTypeface(...);
    l.setTextSize(12f);
    l.setTextColor(Color.BLACK);
    l.setXEntrySpace(5f); 
    l.setYEntrySpace(5f); 

    l.setCustom(ColorTemplate.VORDIPLOM_COLORS, new String[] { "Set1", "Set2", "Set3", "Set4", "Set5" });

    // and many more...
複製代碼

動態實時數據

MPAndroidChart並不支持實時數據,可是爲了向圖表添加新數據或動態刪除數據,有各類方法能夠將Entry對象添加到已有的DataSet對象或從已有的ChartData對象中刪除DataSet對象

動態添加刪除數據

Class DataSet(以及全部子類):

  • addEntry(Entry e): 向DataSet中添加一個Entry對象

Class ChartData(以及全部子類):

  • addEntry(Entry e, int dataSetIndex): 將Entry對象添加到內部的某一個DataSet(由dataSetIndex決定)中去
  • addDataSet(DataSet d): 添加一個DataSet到ChartData中去

一樣也有刪除數據的方法

Class DataSet(以及全部子類):

  • public boolean removeFirst(): 刪除內部的第一個Entry對,刪除成功返回true,失敗返回false
  • public boolean removeLast(): 刪除內部的最後一個Entry對,刪除成功返回true,失敗返回false
  • public boolean removeEntry(Entry e): 刪除指定的一個Entry對(傳入這個Entry對象),刪除成功返回true,失敗返回false
  • public boolean removeEntry(int xIndex): 刪除指定的一個Entry對(傳入這個Entry對象的位置索引),刪除成功返回true,失敗返回false

Class ChartData(以及全部子類):

  • public boolean removeEntry(Entry e, int dataSetIndex): 刪除內部某一個DataSet(由dataSetIndex決定)的第一個Entry對,刪除成功返回true,失敗返回false
  • public boolean removeEntry(int xIndex, int dataSetIndex): 刪除內部某一個DataSet(由dataSetIndex決定)的一個Entry對(傳入這個Entry對象的位置索引),刪除成功返回true,失敗返回false
  • public boolean removeDataSet(DataSet d): 刪除指定的一個dataSet(傳入這個dataSet對象),刪除成功返回true,失敗返回false
  • public boolean removeDataSet(int index): 刪除指定的一個dataSet(傳入這個dataSet對象位置索引),刪除成功返回true,失敗返回false

必定要記住

在動態刪除或者添加數據以後,必定要在調用invalidate()刷新頁面以前調用notifyDataSetChanged()方法更新數據

// EXAMPLE 1
 // add entries to the "data" object
 exampleData.addEntry(...);
 chart.notifyDataSetChanged(); // 讓Chart知道數據發生變化
 chart.invalidate(); // 刷新

 // EXAMPLE 2
 // add entries to "dataSet" object
 dataSet.addEntry(...);
 exampleData.notifyDataChanged(); // 讓DataSet知道數據發生變化
 chart.notifyDataSetChanged(); // 讓Chart知道數據發生變化
 chart.invalidate(); // 刷新
複製代碼

調整視窗顯示

這些方法只適用於LineChart,BarChart,ScatterChart和CandleStickChart

規定哪些能夠顯示

  • setVisibleXRangeMaximum(float maxXRange): 設置視窗X軸顯示的範圍最大值,若是設置爲10,那麼超過10個數據的值在不滾動的狀況下將不會顯示
  • setVisibleXRangeMinimum(float minXRange): 設置視窗X軸顯示的範圍最小值,若是設置爲10,那麼在縮放的時候始終將有10個數據顯示在圖表上
  • setVisibleYRangeMaximum(float maxYRange, AxisDependency axis): 設置視窗Y軸顯示的範圍最大值,若是設置爲10,那麼超過10個數據的值在不滾動的狀況下將不會顯示,設置存在在哪一邊的Y軸
  • setViewPortOffsets(float left, float top, float right, float bottom): 爲當前ViewPort設置自定義偏移量(實際圖表窗口兩側的偏移量),設置這將阻止圖表自動計算偏移量, 使用resetViewPortOffsets()來取消這個. 只有當你知道你在作什麼時才使用這個方法
  • resetViewPortOffsets(): 重置自定義偏移量,從新讓圖表本身進行計算
  • setExtraOffsets(float left, float top, float right, float bottom): 在自動計算的偏移量基礎上再加上額外的偏移量,但這個偏移量不會影響自動計算出來的

移動View

  • fitScreen(): 重置全部的移動和縮放,並讓圖表徹底適配它的邊界(徹底縮小).
  • moveViewToX(float xValue): 將當前視窗的左側(邊緣)移動到指定的x值。.
  • moveViewToY(float yValue, AxisDependency axis): 將根據左邊或者右邊Y軸選中的數據使視窗將該值處於視窗中間
  • moveViewTo(float xValue, float yValue, AxisDependency axis): 上面兩個方法的集合,就是將視窗焦點彙集到選中的某一點(視窗左邊線在點上)
  • centerViewTo(float xValue, float yValue, AxisDependency axis): 上面兩個方法的集合,就是將視窗焦點彙集到選中的某一點(視窗中心線在點上)

使用動畫移動View

  • moveViewToAnimated(float xValue, float yValue, AxisDependency axis, long duration): 使用動畫效果將左邊緣移至所要到的點
  • centerViewToAnimated(float xValue, float yValue, AxisDependency axis, long duration): 使用動畫效果將中心移至所要到的點

全部的moveViewTo相似的方法都會自動調用invalidate方法去刷新頁面,不須要手動去調用

縮放(以代碼方式)

  • zoomIn(): 以1.4f的縮放比係數放大視圖中心焦點
  • zoomOut(): 從視圖中心焦點以0.7f的縮放比係數縮小視圖
  • zoom(float scaleX, float scaleY, float x, float y): 自定義縮放比,自定義縮放中心,記住 1f縮放值等於沒有縮放 0到1之間爲縮小操做,1以上爲放大操做
  • zoom(float scaleX, float scaleY, float xValue, float yValue, AxisDependency axis): 和上面的方法同樣,增長了指定哪一邊的Y軸

縮放動畫

  • zoomAndCenterAnimated(float scaleX, float scaleY, float xValue, float yValue, AxisDependency axis, long duration):使用動畫進行具體縮放比的縮放操做

例子:

chart.setData(...);

// 開始設置視窗
chart.setVisibleXRangeMaximum(20); 
chart.moveViewToX(10);
複製代碼

動畫

全部的圖表都提供了動畫以供操做使用

有三種不一樣的動畫存在

  • animateX(int durationMillis): 橫向變換時的動畫,設置動畫時長
  • animateY(int durationMillis): 縱向變換時的動畫,設置動畫時長
  • animateXY(int xDuration, int yDuration): 橫向縱向動畫合集,分別設置動畫時長
mChart.animateX(3000); // animate horizontal 3000 milliseconds

mChart.animateY(3000); // animate vertical 3000 milliseconds

mChart.animateXY(3000, 3000); // animate horizontal and vertical 3000 milliseconds
複製代碼

平緩動畫效果

你能夠從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,
}
複製代碼

有兩種設置平緩動畫效果的方法

  • 直接使用預設(全部Android版本都可使用)
public void animateY(int durationmillis, Easing.EasingOption option);
複製代碼

例如調用時就將動畫效果設置進去

mChart.animateY(3000, Easing.EasingOption.EaseOutBack); 
複製代碼
  • 自定義平滑效果(僅支持Android3.0以上版本)
public void animateY(int durationmillis, EasingFunction function); 
複製代碼

建立一個類去實現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);
 }
複製代碼

調用的時候(在Android3.0如下的版本中將會Crash掉)

mChart.animateY(3000, new MyEasingFunction()); 
複製代碼

IMaker接口(圖表數據標註接口)

IMarker接口是你可以在建立自定義的標註樣式去顯示你圖表中高亮的數據 IMarker定義的像這樣:

public interface IMarker {

    /**
     * @return The desired (general) offset you wish the IMarker to have on the x- and y-axis.
     *         By returning x: -(width / 2) you will center the IMarker horizontally.
     *         By returning y: -(height / 2) you will center the IMarker vertically.
     */
    MPPointF getOffset();

    /**
     * @return The offset for drawing at the specific `point`. This allows conditional adjusting of the Marker position.
     *         If you have no adjustments to make, return getOffset().
     *
     * @param posX This is the X position at which the marker wants to be drawn.
     *             You can adjust the offset conditionally based on this argument.
     * @param posY This is the X position at which the marker wants to be drawn.
     *             You can adjust the offset conditionally based on this argument.
     */
    MPPointF getOffsetForDrawingAtPos(float posX, float posY);

    /**
     * 刷新方法
     *
     * @param e         The Entry the IMarker belongs to. This can also be any subclass of Entry, like BarEntry or
     *                  CandleEntry, simply cast it at runtime.
     * @param highlight The highlight object contains information about the highlighted value such as it's dataset-index, the * selected range or stack-index (only stacked bar entries). */ void refreshContent(Entry e, Highlight highlight); /** * 使用傳遞來的Canvas對象在指定位置繪製對應的標註 * * @param canvas * @param posX * @param posY */ void draw(Canvas canvas, float posX, float posY); } 複製代碼

建立一個標註View

你須要建立一個類去實現IMarker接口

public class YourMarkerView implements IMarker { ... }
複製代碼

根據你本身的須要去實現你所要實現的方法

下面例子的這種方法更簡單,不須要實現IMarker接口提供的全部方法 只有特定的方法能夠被覆蓋和定製,最重要的是重寫refreshContent方法來調整由標記繪製的數據

public class YourMarkerView extends MarkerView {

    private TextView tvContent;

    public MyMarkerView(Context context, int layoutResource) {
        super(context, layoutResource);

        // find your layout components
        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, Highlight highlight) {

        tvContent.setText("" + e.getY());

        // this will perform necessary layouting
        super.refreshContent(e, highlight);
    }

    private MPPointF mOffset; 

    @Override
    public MPPointF getOffset() {

        if(mOffset == null) {
           // center the marker horizontally and vertically
           mOffset = new MPPointF(-(getWidth() / 2), -getHeight());
        }

        return mOffset;
    }
}
複製代碼

獲取和設置標註對象

想要在圖表中使用你設置好的marker,使用setMarker方法

IMarker marker = new YourMarkerView();
chart.setMarker(marker);
複製代碼

獲取一個已經存在的marker,使用getMarker()方法

IMarker marker = chart.getMarker();
複製代碼

預置的標註

  • MarkerView: 容許加載一個layout去展現對應的標註,繼承這個類並重寫refreshContent(...)方法來使用標註數據
  • MarkerImage: 容許加載一張圖片在標註上顯示對應的圖片,繼承這個類並重寫refreshContent(...)方法來使用標註數據

圖表數據類

ChartData類是全部圖表數據類的基類

public class LineData extends ChartData { ...
複製代碼

下面的是已經被實現且在子類中可使用的方法

數據樣式

  • setValueTextColor(int color): 設置數據顏色
  • setValueTextColors(List colors): 設置數據顏色(傳入顏色數組)
  • setValueTextSize(float size): 設置數據字體大小
  • setValueTypeface(Typeface tf): 設置數據字體
  • setValueFormatter(ValueFormatter f): 設置數據格式化類
  • setDrawValues(boolean enabled): 控制是否繪製數據值

獲取數據

  • getDataSetByIndex(int index): 根據索引值獲取DataSet
  • contains(Entry entry): 查看是否包含某個具體的Entry對,對性能損耗嚴重
  • contains(T dataSet): 查看是否包含某個DataSet

清空數據

  • clearValues(): 清除所DataSet數據和依賴的Entry對數據,但不會刪除X軸上的座標軸數據

高亮

  • setHighlightEnabled(boolean enabled): 設置是否容許高亮.
  • setDrawVerticalHighlightIndicator(boolean enabled): 是否繪製縱向高亮指示線
  • setDrawHorizontalHighlightIndicator(boolean enabled): 是否繪製橫向高亮指示線

動態數據

  • notifyDataChanged(): 讓數據類知道數據發生了變化

ChartData的子類

BarData

  • setGroupSpace(float percent): 設置一組數據間的間距.100是一個數據條的長度,默認80
  • isGrouped(): 判斷該柱狀圖是否是羣組柱狀圖

ScatterData

  • getGreatestShapeSize(): 經過內部的數據查詢最大的Shape值.

PieData

  • getDataSet(): 獲取DataSet,PieData不能擁有多個DataSet
  • setDataSet(PieDataSet set): 設置DataSet

BubbleData

  • setHighlightCircleWidth(float width): 設置高亮圈寬度

DataSet數據類

DataSet數據類用法與ChartData幾乎如出一轍

子類

Line-, Bar-, Scatter-, Bubble- & CandleDataSet

  • setHighLightColor(int color): 設置高亮顏色

Line-, Bar-, Scatter-, Candle- & RadarDataSet

  • setDrawHighlightIndicators(boolean enabled): 控制是否繪製高亮指示線
  • setHighlightLineWidth(float width): 設置高亮指示線寬度

Line- & RadarDataSet

  • setFillColor(int color): 設置填充顏色
  • setFillAlpha(int alpha): 設置填充透明度
  • setFillDrawable(Drawable d): 選擇一個Drawable去填充
  • setDrawFilled(boolean filled): 開啓以後將會徹底填充繪製,而不是僅僅只有一條線,關閉這項將有性能上的提高,小於Android4.3沒法使用,默認關閉
  • setLineWidth(float width): 設置數據線寬度

LineDataSet

  • setCircleRadius(float size): 設置圓形指示器的圓弧度,默認值4f
  • setDrawCircles(boolean enabled):設置是否繪製圓形指示器,默認true
  • setDrawCubic(boolean enabled): 開啓以後數據線將顯示成立體模式,對性能有影響 默認關閉
  • setCubicIntensity(float intensity): 設置立體強度 最大值爲1f, 最小0.05f,默認0.2f
  • setCircleColor(int color): 設置圓形指示器的顏色
  • setCircleColors(List colors): 設置圓形指示器顏色
  • setCircleColorHole(int color): 設置圓形指示器內部圓的顏色
  • setDrawCircleHole(boolean enabled): 設置是否繪製圓形指示器內部圓
  • enableDashedLine(float lineLength, float spaceLength, float phase): 設置使用虛線數據線

BarDataSet

  • setBarSpacePercent(float percent): 設置條形圖間距百分比
  • setBarShadowColor(int color): 設置條形圖背景陰影顏色
  • setHighLightAlpha(int alpha): 設置條形圖背景高亮指示器的透明度,最小0(徹底透明),最大255(徹底顯示).
  • setStackLabels(String[] labels): 給層疊條形圖設置多個標籤值

ScatterDataSet

  • setScatterShapeSize(float size): 設置形狀大小
  • setScatterShape(ScatterShape shape): 設置形狀樣式

CandleDataSet

  • setBodySpace(float space): 設置左右兩個蠟燭圖的間距,默認0.1f(10%),最大0.45f,最小0f
  • setShadowWidth(float width): 設置蠟燭陰影線的寬度,默認3f.
  • setShadowColor(int color): 設置陰影顏色.
  • setDecreasingColor(int color): 當開盤比收盤數據大時,使用該顏色顯示.
  • setIncreasingColor(int color): 當開盤比收盤數據小時,使用該顏色顯示.
  • setDecreasingPaintStyle(Paint.Style style): 當開盤比收盤數據大時,使用該樣式繪製(填充或者描邊).
  • setIncreasingPaintStyle(Paint.Style style): 當開盤比收盤數據小時,使用該樣式繪製(填充或者描邊).

BubbleDataSet

  • setHighlightCircleWidth(float width): 設置高亮圈的寬度

PieDataSet

  • setSliceSpace(float degrees): 設置分開的餅圖兩片間的間距,默認:0沒有間距,最大20,最小0
  • setSelectionShift(float shift): 設置選中的餅圖片浮動離開中心點的距離,默認12f

視窗控制器

初始化

經過如下方式來獲取視窗Handler實例

ViewPortHandler handler = chart.getViewPortHandler();
複製代碼

縮放和位移

  • getScaleX(): 獲取X軸縮放等級.
  • getScaleY(): 獲取Y軸縮放等級.
  • getTransX(): 獲取X軸上的位移量.
  • getTransY(): 獲取Y軸上的位移量.

圖表尺寸和內容

  • getChartWidth(): 獲取圖表寬度
  • getChartHeight(): 獲取圖表高度
  • getContentRect(): 返回圖表內容所在的矩形RectF對象.

FillFormatter接口

新建一個類實現FillFormatter接口

並重寫下面這個方法

public float getFillLinePosition(LineDataSet dataSet, LineDataProvider provider)
複製代碼

能夠實現單個的DataSet的實如今哪一個位置中止繪製

public class MyCustomFillFormatter implements FillFormatter {

    @Override
    public float getFillLinePosition(LineDataSet dataSet, LineDataProvider dataProvider) {

        float myDesiredFillPosition = ...;
        // put your logic here...

        return myDesiredFillPosition;
    }
}
複製代碼

把格式化添加到圖表中

lineDataSet.setFillFormatter(new MyCustomFillFormatter());
複製代碼

默認的實現---->DefaultFillFormatter.

相關文章
相關標籤/搜索