BarChartManager.java
5.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package com.yinhebairong.clasmanage.utils;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.formatter.ValueFormatter;
import java.util.ArrayList;
import java.util.List;
public class BarChartManager {
private BarChart barChart;
private YAxis leftAxis; //左边Y轴
private YAxis rightAxis; //右边Y轴
private XAxis xAxis; //X轴
public BarChartManager(BarChart mBarChart) {
this.barChart = mBarChart;
leftAxis = barChart.getAxisLeft();
rightAxis = barChart.getAxisRight();
mBarChart.setViewPortOffsets(150, 20, 100, 200);
xAxis = barChart.getXAxis();
}
private void initBarChart() {
barChart.getDescription().setEnabled(false);
barChart.setDrawGridBackground(false);
barChart.setTouchEnabled(true); // - > 触摸事件禁用 , 包括放大缩小 还有碰到触发线条标尺
barChart.setDragEnabled(true); // 圆圈选中之后的标尺 滑动
barChart.setScaleEnabled(false); // 触摸之后放大缩小
barChart.setPinchZoom(false);
//XY轴的设置
//X轴设置显示位置在底部
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setAxisMinimum(0f);
xAxis.setGranularity(1f);
//保证Y轴从0开始,不然会上移一点
leftAxis.setAxisMinimum(0f);
rightAxis.setAxisMinimum(0f);
xAxis.setSpaceMin(1f);
leftAxis.setSpaceMin(1f);
rightAxis.setSpaceMin(1f);
xAxis.setDrawGridLines(false);
xAxis.setLabelRotationAngle(-40);
}
private void initBarDataSet(BarDataSet barDataSet, int color, boolean mode) {
barDataSet.setColor(color); // 柱子的颜色
barDataSet.setFormLineWidth(1f);
barDataSet.setFormSize(15.f);
//不显示柱状图顶部值
}
private void setLegend() {
Legend legend = barChart.getLegend();
legend.setFormSize(12f); // 图例的图形大小
legend.setTextSize(15f); // 图例的文字大小
legend.setDrawInside(false); // 设置图例在图中
legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); // 图例的方向为垂直
legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); //显示位置,水平右对齐
legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); // 显示位置,垂直上对齐
// 设置水平与垂直方向的偏移量
legend.setYOffset(55f);
legend.setXOffset(30f);
}
public void ShowBart(List<String> detail, List<Float> xAxisValues, List<Float> yValuses1, List<Float> yValuses2, List<String> labels, List<Integer> colours) {
initBarChart();
// y 数据
ArrayList<BarEntry> yValues = new ArrayList<>();
// y2 数据
ArrayList<BarEntry> yValues2 = new ArrayList<>();
for (int i = 0; i < yValuses1.size(); i++) {
yValues.add(new BarEntry(i, yValuses1.get(i)));
}
for (int x = 0; x < yValuses2.size(); x++) {
yValues2.add(new BarEntry(x, yValuses2.get(x)));
}
BarDataSet barDataSet1 = new BarDataSet(yValues, labels.get(0));
barDataSet1.setColor(colours.get(0));
BarDataSet barDataSet2 = new BarDataSet(yValues2, labels.get(1));
barDataSet2.setColor(colours.get(1));
barDataSet1.setDrawValues(false);
barDataSet2.setDrawValues(false);
BarData data = new BarData(barDataSet1, barDataSet2);
float groupSpace = 0.06f;
float barSpace = 0.02f;
float barWidth = 0.45f;
// 设置 柱子宽度
data.setBarWidth(barWidth);
setXAxis(xAxisValues.get(xAxisValues.size() - 1) + 1, xAxisValues.get(0), xAxisValues.size(), detail);
data.groupBars(0.0f, groupSpace, barSpace);
barChart.setData(data);
}
/**
* 设置Y轴值
*
* @param max
* @param min
* @param labelCount
*/
public void setYAxis(float max, float min, int labelCount) {
if (max < min) {
return;
}
leftAxis.setAxisMaximum(max);
leftAxis.setAxisMinimum(min);
leftAxis.setLabelCount(labelCount, false);
rightAxis.setAxisMaximum(max);
rightAxis.setAxisMinimum(min);
rightAxis.setLabelCount(labelCount, false);
barChart.invalidate();
}
/**
* 设置X轴的值
*
* @param max
* @param min
* @param labelCount
*/
public void setXAxis(float max, float min, int labelCount, List<String> detail) {
if (max < min) {
return;
}
xAxis.setAxisMaximum(max);
xAxis.setAxisMinimum(min);
xAxis.setLabelCount(labelCount, true);
ValueFormatter Barformatter = new ValueFormatter() {
@Override
public String getFormattedValue(float value) {
//设置 xAxis.setGranularity(1);后 value是从0开始的,每次加1,
int v = (int) value;
if(v==max){
String st = detail.get(detail.size()-1);
String tim1 = "";
tim1 = st;
return tim1;
}else if (v < detail.size() && v >= 0){
String st = detail.get(v);
String tim1 = "";
tim1 = st;
return tim1;
}else {
return null;
}
}
};
xAxis.setValueFormatter(Barformatter);
barChart.invalidate();
}
}