1、添加依賴
項(xiàng)目目錄->app->build.gradle
dependencies {
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
}
項(xiàng)目目錄->app->setting.gradle
dependencyResolutionManagement {
repositories {
maven { url 'https://jitpack.io' }
}
}
2、Chart 類
? 該類是圖表的控件,類似于按鍵、圖片,是從 xml 文件中通過 id 獲取到的。
獲取/創(chuàng)建
xxxChart chart = (xxxChart) findViewById(R.id.chart);
常用方法
方法名 | 描述 |
---|---|
chart.setDrawBorders(boolean) | 是否顯示圖表邊界,true:顯示,默認(rèn) false |
chart.setScaleEnabled(boolean) | 是否使能縮放,true:使能,默認(rèn) false |
chart.setScaleXEnabled(boolean) | 是否使能 X 軸方向的縮放,true:使能,默認(rèn) false |
chart.setScaleYEnabled(boolean) | 是否使能 Y 軸方向的縮放,true:使能,默認(rèn) false |
chart.setExtraRightOffset(float) | 設(shè)置圖表右邊邊界的偏移(解決 X 軸顯示不全問題) |
chart.setExtraLeftOffset(float) | 設(shè)置圖表左邊邊界的偏移(解決 X 軸顯示不全問題) |
chart.setExtraBottomOffset(float) | 設(shè)置圖表底邊邊界的偏移 |
chart.setExtraTopOffset(float) | 設(shè)置圖表頂邊邊界的偏移 |
chart.setOnChartValueSelectedListener (OnChartValueSelectedListener) |
監(jiān)聽點(diǎn)擊圖表中的數(shù)據(jù)事件(詳見 10、OnChartValueSelectedListener 接口)) |
chart.setData(-Data) | 往圖表插入一組數(shù)據(jù)(詳見 3、DataSet 類)) |
chart.getXAxis() | 獲取圖表的 X 軸 |
chart.setVisibleXRangeMaximum(float) | 設(shè)置當(dāng)前圖表中最多在 X 軸坐標(biāo)線上顯示刻度線的總量 |
chart.getAxisLeft() | 獲取圖表左邊的 Y 軸 |
chart.getAxisRight() | 獲取圖表右邊的 Y 軸 |
chart.getLegend() | 獲取圖表的圖例 |
chart.setDescription() | 設(shè)置圖表標(biāo)題 |
chart.animateY(int) | 設(shè)置播放 Y 軸方向的動(dòng)畫時(shí)間(毫秒) |
chart.animateX(int) | 設(shè)置播放 X 軸方向的動(dòng)畫時(shí)間(毫秒) |
chart.animateXY(int) | 設(shè)置播放 XY 軸方向的動(dòng)畫時(shí)間(毫秒) |
chart.notifyDataSetChanged() | 讓圖表知道依賴的數(shù)據(jù)發(fā)生變化時(shí)調(diào)用,調(diào)用后圖表會(huì)重新計(jì)算,在使用動(dòng)態(tài)數(shù)據(jù)時(shí)很有用 |
chart.invalidate() | 這個(gè)方法刷新圖表將會(huì)重新繪制,更改圖表后想要生效必須調(diào)用 |
3、DataSet 類
作用
? 設(shè)置展現(xiàn)在圖表上的一組數(shù)據(jù)的一些表現(xiàn)形式。比如說設(shè)置折線的顏色、粗細(xì)等。
構(gòu)造函數(shù)
xxxDataSet dataSet = new xxxDataSet(List<Entry> yVals, String label);
-
yVals:需要進(jìn)行展示的一組數(shù)據(jù)
-
label:該組數(shù)據(jù)的名字
yVals list 數(shù)組由來:
float[] data;
// 填充數(shù)據(jù)
for(int i = 0; i < data.length; i++) {
// 兩個(gè)數(shù)字對(duì)應(yīng)的分別是 X軸 Y軸
barList.add(new BarEntry(i, data[i]));
}
共用方法
方法名 | 描述 |
---|---|
dataSet.setColor(int) | 設(shè)置折線/柱子的顏色,顏色可以通過 Color.parseColor(“#xxxxxx”) 得到 |
dataSet.setValueTextSize(float) | 設(shè)置折線點(diǎn)/柱子上的字體大小 |
dataSet.setValueFormatter(IValueFormatter) | 對(duì)折線點(diǎn)/柱子上的數(shù)據(jù)重新進(jìn)行顯示,可以實(shí)現(xiàn)加單位(詳見 8、IValueFormatter 接口)) |
dataSet.setHighlightEnabled(boolean) | 選中數(shù)據(jù)是否高亮顯示,true:高亮顯示,默認(rèn) true |
dataSet.setHighLightColor(int) | 設(shè)置高亮顏色(如果不高亮顯示,該設(shè)置無效) |
dataSet.addEntry(Entry) | 向 DataSet 中添加一個(gè) Entry 對(duì)象(數(shù)據(jù)) |
dataSet.removeFirst() | 刪除 DataSet 的第一個(gè) Entry 對(duì)象(數(shù)據(jù)) |
dataSet.removeLast() | 刪除 DataSet 的最后一個(gè) Entry 對(duì)象(數(shù)據(jù)) |
dataSet.removeEntry(Entry) dataSet.removeEntry(int xIndex) |
刪除指定的一個(gè) Entry 對(duì)象(數(shù)據(jù)) |
3.1 LineDataSet
方法名 | 描述 |
---|---|
lineDataSet.setLineWidth(float) | 設(shè)置折線的寬度 |
lineDataSet.setCircleColor(int) | 設(shè)置折線點(diǎn)的顏色,顏色可以通過Color.parseColor(“#xxxxxx”) 得到 |
lineDataSet.setCircleRadius(float) | 設(shè)置折線點(diǎn)的半徑 |
lineDataSet.setDrawCircleHole(boolean) | 是否將折線點(diǎn)畫成空心圓,true:畫成空心圓,默認(rèn) false |
lineDataSet.setCircleHoleRadius(float) | 設(shè)置折線點(diǎn)空心圓的圓心半徑(如果沒有設(shè)置成空心圓,該設(shè)置無效) |
lineDataSet.setCircleColorHole(int) | 設(shè)置折線點(diǎn)空心圓內(nèi)部的顏色(如果沒有設(shè)置成空心圓,該設(shè)置無效) |
lineDataSet.setHighlightLineWidth(float) | 設(shè)置高亮指示線寬度(如果不高亮顯示,該設(shè)置無效) |
3.2 BarDataSet
方法名 | 描述 |
---|---|
barDataSet.setBarBorderColor(int) | 設(shè)置柱子邊框顏色,顏色可以通過 Color.parseColor(“#xxxxxx”) 得到 |
barDataSet.setBarBorderWidth(float) | 設(shè)置柱子邊框厚度 |
barDataSet.setHighLightAlpha(int) | 設(shè)置柱子高亮顯示時(shí)的顏色透明度,0:完全透明, 255:完全不透明(如果不高亮顯示,該設(shè)置無效) |
4、Data 類
? ChartData 類是所有圖表數(shù)據(jù)類的基類
public class LineData extends ChartData { ...
作用
? **將一個(gè)或若干個(gè) -DataSet 數(shù)據(jù)類做進(jìn)一步的包裝,由 -Data 類進(jìn)行管理。**并通過它傳遞給 -Chart 類進(jìn)行顯示。
構(gòu)造方法
xxxData data = new xxxData(IBarDataSet DataSet);
- DataSet:前面提到的 xxxDataSet 數(shù)據(jù)類。
共用方法
方法名 | 描述 |
---|---|
data.addDataSet(DataSet) | 添加一組新的數(shù)據(jù)(動(dòng)態(tài)添加數(shù)據(jù)的時(shí)候使用)(詳見 3、DataSet 類)) |
data.addEntry(Entry e, int dataSetIndex) | 將 Entry 對(duì)象添加到內(nèi)部的某一個(gè) DataSet(由 dataSetIndex 決定)中去 |
data.removeDataSet(DataSet) data.removeDataSet(**int **index) |
刪除指定的一個(gè) DataSet |
data.setValueFormatter(IValueFormatter) | 對(duì)折線點(diǎn)/柱子上的數(shù)據(jù)重新進(jìn)行顯示,可以實(shí)現(xiàn)加單位(詳見 8、IValueFormatter 接口)) |
data.setDrawValues(boolean) | 是否顯示各個(gè)數(shù)據(jù)的值,false:不顯示,默認(rèn) true |
4.1 BarChart
方法名 | 描述 |
---|---|
barChart.setBarWidth(float) | 設(shè)置柱子寬度,一般不超過 1 就可以了 |
5、AxisBase 類
作用
? 該類是 Chart 圖表的 X/Y 軸的基類。
共用方法
方法名 | 描述 |
---|---|
Axis.setTextSize(float) | 設(shè)置坐標(biāo)軸的字體大小 |
Axis.setAxisLineColor(int) | 設(shè)置坐標(biāo)軸的字體顏色,顏色可以通過 Color.parseColor(“#xxxxxx”) 得到 |
Axis.setAxisLineWidth(float) | 設(shè)置坐標(biāo)軸的粗細(xì) |
Axis.setValueFormatter(IAxisValueFormatter) | 重新格式化坐標(biāo)軸標(biāo)簽(值)(詳見 9、IAxisValueFormatter 接口)) |
Axis.setAxisMinimum(float) Axis.setAxisMaximum(float) | 設(shè)置坐標(biāo)軸顯示的區(qū)間 |
Axis.setGranularity(float) | 設(shè)置坐標(biāo)軸坐標(biāo)之間的最小間隔 |
Axis.setLabelCount(int) | 設(shè)置坐標(biāo)軸總共有多少個(gè)值 |
Axis.addLimitLine(LimitLine) | 向坐標(biāo)軸上添加一條新的限制線(詳見 6、LimitLine 類)) |
Axis.removeLimitLine(LimitLine) | 從坐標(biāo)軸上移除一條限制線(詳見 6、LimitLine 類)) |
Axis.setDrawLimitLinesBehindData(boolean) | 設(shè)置限制線和數(shù)據(jù)標(biāo)簽的圖層順序,true:限制線將繪制在數(shù)據(jù)的后面,否則繪制在前面,默認(rèn)為 false |
Axis.setDrawGridLines(boolean) | 是否繪制坐標(biāo)軸的網(wǎng)格線,false:不繪制,默認(rèn) true |
Axis.setGridColor(int) | 設(shè)置坐標(biāo)軸的網(wǎng)格線的顏色,顏色可以通過 Color.parseColor(“#xxxxxx”) 得到 |
5.1 XAxis
作用
? 該類是 Chart 圖表的 X 軸,由 chart.getXAxis()
獲取。
常用方法
方法名 | 描述 |
---|---|
xAxis.setPosition(XAxis.XAxisPosition.xxx) | 設(shè)置 X 軸的位置??扇。築OTTOM、BOTH_SIDED BOTTOM_INSIDE、TOP、TOP_INSIDE |
xAxis.setLabelCount(int) | 設(shè)置 X 軸總共有多少個(gè)值,一般該方法后面跟著 chart.setVisibleXRangeMaximum(float) |
xAxis.setLabelRotationAngle(float) | 設(shè)置 X 軸標(biāo)簽數(shù)據(jù)旋轉(zhuǎn)的角度 |
5.2 YAxis
作用
? 該類是 Chart 圖表的 Y 軸,但 Chart 中有左右兩個(gè) Y 軸,分別由 chart.getAxisLeft()、chart.getAxisRight()
獲取。
常用方法
方法名 | 描述 |
---|---|
yAxis.setEnabled(boolean) | 設(shè)置該 Y 軸是否顯示,false:不顯示,默認(rèn)顯示 |
yAxis.setInverted(boolean) | 設(shè)置是否倒置高低值,true:大值將會(huì)在底部出現(xiàn),小值將會(huì)在頂部出現(xiàn),默認(rèn) false |
6、LimitLine 類
作用
? 該類是 Chart 的限制線,作用是呈現(xiàn)一些特殊的信息,像邊界、約束等。
構(gòu)造函數(shù)
LimitLine limitLine = new LimitLine(float limit, String label);
-
limit:這條線應(yīng)該出現(xiàn)在坐標(biāo)軸上的位置(值)
-
label:該限制線的名字
常用方法
方法名 | 描述 |
---|---|
limitLine.setLabelPosition(LimitLine.LimitLabelPosition.xxx) | 設(shè)置限制線描述字符串的位置,可以取值:LEFT_TOP, LEFT_BOTTOM, RIGHT_TOP, RIGHT_BOTTOM |
limitLine.setLineWidth(float) | 設(shè)置限制線的寬度 |
limitLine.setTextSize(float) | 設(shè)置限制線描述字符串的大小 |
limitLine.setTextColor(int) | 設(shè)置限制線描述字符串的顏色,顏色可以通過Color.parseColor(“#xxxxxx”) 得到 |
limitLine.setLineColor(int) | 設(shè)置限制線的顏色,顏色可以通過 Color.parseColor(“#xxxxxx”) 得到 |
7、Description 類
作用
? 該類是一個(gè) Chart 類的標(biāo)題。
構(gòu)造函數(shù)
Description description = new Description();
常用方法
方法名 | 描述 |
---|---|
description.setText(String) | 設(shè)置圖表標(biāo)題名 |
description.setTextSize(float) | 設(shè)置圖表標(biāo)題大小 |
description.setPosition(float x, float y) | 設(shè)置圖表標(biāo)題位置 |
8、IValueFormatter 接口
作用
? 對(duì)數(shù)據(jù)組 DataSet 中的數(shù)據(jù)標(biāo)簽進(jìn)行重新格式化。
例子文章來源:http://www.zghlxwxcb.cn/news/detail-456659.html
DataSet.setValueFormatter(new IValueFormatter() {
@Override
public String getFormattedValue(float v, Entry entry, int i, ViewPortHandler viewPortHandler) {
if(entry.getY() == v){
return v + "h";
}
return "";
}
});
- v:要格式化的值
- enry:值所屬的條目
9、IAxisValueFormatter 接口
作用
? 對(duì)坐標(biāo)軸的標(biāo)簽進(jìn)行重新格式化。
例子
String[] data;
Axis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
if((int)value >= 0 && (int)value < data.length) {
return data[(int) value];
}
return "";
}
});
- value:要格式化的值
10、OnChartValueSelectedListener 接口
作用
? 監(jiān)聽是否點(diǎn)擊了數(shù)據(jù)組中的數(shù)據(jù)。可以在該監(jiān)聽函數(shù)中實(shí)現(xiàn)點(diǎn)擊不同的數(shù)據(jù)在另一個(gè) Chart 中展現(xiàn)對(duì)應(yīng)的不同的數(shù)據(jù)。
例子
chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
// 點(diǎn)擊數(shù)據(jù)后的回調(diào)函數(shù)
@Override
public void onValueSelected(Entry entry, Highlight highlight) {
int iEntry = (int) entry.getX();
}
// 取消點(diǎn)擊數(shù)據(jù)后的回調(diào)函數(shù)
@Override
public void onNothingSelected() {
}
});
11、例子
文章來源地址http://www.zghlxwxcb.cn/news/detail-456659.html
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/bar"
android:layout_marginTop="50dp"
android:layout_width="380dp"
android:layout_height="258dp"
android:layout_gravity="center" >
</com.github.mikephil.charting.charts.BarChart>
// x軸
String[] day = {"1-1", "1-2", "1-3", "1-4", "1-5", "1-6", "1-7"};
// x軸對(duì)應(yīng)的數(shù)據(jù)
float[] time = {(float)6.8, (float)5.4, (float)2.9, (float)8.2, (float)4.7, (float)6.1, (float)9.2};
// 實(shí)例化一個(gè)List用來存儲(chǔ)數(shù)據(jù)
List<BarEntry> barList = new ArrayList<>();
/*柱狀圖*/
mBarChart = (BarChart) findViewById(R.id.bar);
// 是否使能縮放
mBarChart.setScaleEnabled(false);
mBarChart.setExtraLeftOffset(10);
mBarChart.setExtraTopOffset(50);
// 動(dòng)畫
mBarChart.animateY(1000);
/** 柱子 **/
// 填充數(shù)據(jù)
for(int i = 0; i < time.length; i++) {
// 兩個(gè)數(shù)字對(duì)應(yīng)的分別是 X軸 Y軸
barList.add(new BarEntry(i, time[i]));
}
// 設(shè)置該組數(shù)據(jù)名稱
BarDataSet barDataSet = new BarDataSet(barList,"時(shí)長");
// 設(shè)置柱子顏色
barDataSet.setColors(Color.parseColor("#D2B48C"));
// 柱子邊框顏色
barDataSet.setBarBorderColor(Color.parseColor("#CD853F"));
// 柱子邊框厚度
barDataSet.setBarBorderWidth(2);
// 設(shè)置柱子高亮顯示時(shí)的顏色透明度,當(dāng)不高亮顯示時(shí),該設(shè)置無效
barDataSet.setHighLightAlpha(100);
// 設(shè)置柱子上字體大小
barDataSet.setValueTextSize(11);
// 定義柱子上的數(shù)據(jù)顯示,可以實(shí)現(xiàn)加單位
barDataSet.setValueFormatter(new IValueFormatter() {
@Override
public String getFormattedValue(float v, Entry entry, int i, ViewPortHandler viewPortHandler) {
if(entry.getY() == v){
return v + "h";
}
return "";
}
});
BarData barData = new BarData(barDataSet);
// 設(shè)置柱子寬度
barData.setBarWidth(0.7f);
mBarChart.setData(barData);
/** X軸 **/
XAxis xAxis = mBarChart.getXAxis();
// 設(shè)置X軸的位置 BOTTOM BOTH_SIDED BOTTOM_INSIDE TOP TOP_INSIDE
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
// 設(shè)置X軸坐標(biāo)之間的最小間隔
xAxis.setGranularity(1);
// 設(shè)置X軸的刻度數(shù)量
xAxis.setLabelCount(day.length);
// 設(shè)置當(dāng)前圖表中最多在x軸坐標(biāo)線上顯示刻度線的總量
mBarChart.setVisibleXRangeMaximum(8);
// 設(shè)置X軸的字體大小
xAxis.setTextSize(11);
// 設(shè)置X軸的字體顏色
xAxis.setAxisLineColor(Color.BLACK);
// 設(shè)置X軸的粗細(xì)
xAxis.setAxisLineWidth(1);
// 是否繪制X軸的網(wǎng)格線
xAxis.setDrawGridLines(false);
// 給X軸設(shè)置新的標(biāo)簽(值)
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
if((int)value >= 0 && (int)value < day.length) {
return day[(int)value];
}
return "";
}
});
/** Y軸 **/
YAxis leftYAxis = mBarChart.getAxisLeft();
YAxis rightYAxis = mBarChart.getAxisRight();
// 設(shè)置某一個(gè)Y軸是否顯示
rightYAxis.setEnabled(false);
// 設(shè)置Y軸顯示的區(qū)間
leftYAxis.setAxisMinimum(0);
leftYAxis.setAxisMaximum(10);
// 設(shè)置Y軸值之間的間隔
leftYAxis.setGranularity(2);
// 設(shè)置Y軸總共有多少個(gè)值
leftYAxis.setLabelCount(6);
// 設(shè)置Y軸字體大小
leftYAxis.setTextSize(11);
// 設(shè)置Y軸字體顏色
leftYAxis.setAxisLineColor(Color.BLACK);
// 設(shè)置Y軸的粗細(xì)
leftYAxis.setAxisLineWidth(1f);
// 給Y軸設(shè)置新的標(biāo)簽(值)
leftYAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float v, AxisBase axisBase) {
return (int)v + "h";
}
});
/** 限制線 **/
// 創(chuàng)建一個(gè)新的限制線
LimitLine limitLine = new LimitLine(8,"限制線");
// 設(shè)置限制線的寬度
limitLine.setLineWidth(2);
limitLine.setTextSize(11);
limitLine.setTextColor(Color.parseColor("#B22222"));
limitLine.setLineColor(Color.RED);
leftYAxis.addLimitLine(limitLine);
/** 圖例 **/
Legend legend = mBarChart.getLegend();
// 設(shè)置圖例的文本顏色
legend.setTextColor(Color.BLACK);
legend.setTextSize(12);
/** 圖表標(biāo)題 **/
Description description = new Description();
description.setText("圖表標(biāo)題");
description.setTextSize(17);
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
int w = windowManager.getDefaultDisplay().getWidth();
description.setPosition(w / 2 + 100, 90);
mBarChart.setDescription(description);
到了這里,關(guān)于【Android Studio】第三方庫 圖表(MPAndroidChart)使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!