各个属性介绍地址:http://www.jianshu.com/p/7e8de03dad79
Android studio hellocharts 接入
repositories {
maven {
url "https://jitpack.io"
}
}
dependencies {
//implementation 'com.github.lecho:hellocharts-android:v1.5.8'
implementation 'com.github.lecho:hellocharts-library:1.5.8@aar'
}
private ColumnChartView columnChartView;//柱状图
private ColumnChartData columnChartData;//存放柱状图数据的对象
private boolean hasAxes = true; //是否有坐标轴
private boolean hasAxesNames = false; //是否有坐标轴的名字
private boolean hasLabels = false; //柱子上是否显示标识文字
private boolean hasLabelForSelected = true; //柱子被点击时,是否显示标识的文字
private List<AxisValue> mAxisXValues = new ArrayList<>(); //x轴方向的坐标数据
private List<AxisValue> mColumnAxisYValues = new ArrayList<>(); //y轴方向的坐标数据
//设置X、Y轴的数据
private void initXY() {
//设置x轴上面的数据
for (int i = 0; i < chartDataItemBeanList.size(); i++) {
mAxisXValues.add(new AxisValue(i).setLabel(chartDataItemBeanList.get(i).getTime().substring(5)));
}
//设置Y轴上面的数据
for (int i = 0; i < 20; i++) {
mColumnAxisYValues.add(new AxisValue(i).setLabel("" + i));
}
}
/**
* 填充数据
*/
private void setColumnData() {
//柱状图
int numColumns = chartDataItemBeanList.size();//有多少堆数据
List<Column> columns = new ArrayList<>();
List<SubcolumnValue> values;
List<Float> columnList = new ArrayList<>();
for (int i = 0; i < numColumns; ++i) {
values = new ArrayList();//每一堆有多少列
values.add(new SubcolumnValue(Float.valueOf(chartDataItemBeanList.get(i).getPcipop()), colors[0]));
values.add(new SubcolumnValue(Float.valueOf(chartDataItemBeanList.get(i).getVidpop()), colors[1]));
columnList.add(Float.valueOf(chartDataItemBeanList.get(i).getPcipop()));
columnList.add(Float.valueOf(chartDataItemBeanList.get(i).getVidpop()));
Column column = new Column(values);
column.setHasLabels(hasLabels);
column.setHasLabelsOnlyForSelected(hasLabelForSelected);
columns.add(column);
}
float maxColumnPointY = Collections.max(columnList);//获取Y轴最大值
columnChartData = new ColumnChartData(columns);
if (hasAxes) {
Axis axisX = new Axis();
Axis axisY = new Axis().setHasLines(true);
if (hasAxesNames) {//显示坐标轴名称
axisX.setName("最近7天数据");
axisY.setName("问诊人次");
}
axisX.setValues(mAxisXValues);//设置x轴的坐标
//设置Y轴的坐标
axisY.setAutoGenerated(true);//自动填充Y轴坐标
// axisY.setValues(mColumnAxisYValues);//手动填充Y轴坐标
columnChartData.setAxisXBottom(axisX);
columnChartData.setAxisYLeft(axisY);
} else {
columnChartData.setAxisXBottom(null);
columnChartData.setAxisYLeft(null);
}
columnChartView.setZoomEnabled(false);是否支持缩放
设置是否可以选中图表中的值,即当点击图表中的数据值后,会一直处于选中状态,直到用户点击其他空间。默认为false。
columnChartView.setValueSelectionEnabled(true);
columnChartView.setColumnChartData(columnChartData);//填充数据
Viewport columnView = new Viewport(columnChartView.getMaximumViewport());
//Y轴最大值为 加上2、防止显示不全
columnView.top = maxColumnPointY + 2;
columnChartView.setCurrentViewport(columnView);
}
代码调用
initXY();
setColumnData();
private LineChartView lineChartView;//折线图
private LineChartData lineChartData;//存放折线图数据的对象
//设置X、Y轴的数据
private void initXY() {
//设置x轴上面的数据
for (int i = 0; i < chartDataItemBeanList.size(); i++) {
mAxisXValues.add(new AxisValue(i).setLabel(chartDataItemBeanList.get(i).getTime().substring(5)));
}
//设置Y轴上面的数据
for (int i = 0; i < 5; i++) {
mLineAxisYValues.add(new AxisValue(i).setLabel("" + i * 500));
}
}
/**
* 折线图填充数据
*/
private void setLineChartData() {
//X轴数据点
List<PointValue> mPointValues = new ArrayList<>();
// //获取list中最大最小值 (纯属打印、非必须)
List<Float> list = new ArrayList<>();
for (int i = 0; i < chartDataItemBeanList.size(); i++) {
//数据点
mPointValues.add(new PointValue(i, Float.valueOf(chartDataItemBeanList.get(i).getTotalmoney())));
//将所有点添加至新list中
list.add(Float.valueOf(chartDataItemBeanList.get(i).getTotalmoney()));
}
float maxPoint = Collections.max(list);
float minPoint = Collections.min(list);
Line line = new Line(mPointValues);
//存放线条的集合
List<Line> lines = new ArrayList<>();
//LineChartValueFormatter chartValueFormatter = new SimpleLineChartValueFormatter(2);
//line.setFormatter(chartValueFormatter);//显示小数点(后2位)
// line.setHasLabels(true);//曲线的数据坐标是否加上备注
line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效)
line.setShape(ValueShape.CIRCLE);//折线图上每个数据点的形状 这里是圆形 (
//有三种 :ValueShape.SQUARE(方形) ValueShape.CIRCLE(圆形) ValueShape.DIAMOND (菱形))
line.setPointRadius(3);//坐标点大小
line.setCubic(true);//曲线是否平滑
line.setFilled(true);//是否填充曲线的面积
line.setHasLines(true);//是否用直线显示。如果为false 则没有曲线只有点显示
line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示
line.setColor(Color.parseColor("#037BFF"));
line.setStrokeWidth(1);//设置线的宽度
lines.add(line);
lineChartData = new LineChartData();
lineChartData.setLines(lines);
//设置数据的初始值,即所有的数据从baseValue开始计算,默认值为0。
lineChartData.setBaseValue(0f);
Axis axisX = new Axis();
Axis axisY = new Axis().setHasLines(true);
if (hasAxesNames) {//显示坐标轴名称
axisX.setName("最近7天数据");
axisY.setName("问诊收入");
}
//设置x轴的坐标
axisX.setValues(mAxisXValues);
axisX.setHasTiltedLabels(true);
//设置Y轴的坐标
// axisY.setValues(mLineAxisYValues);//手动填充纵坐标数据
axisY.setAutoGenerated(true);//自定义纵坐标数据
axisY.setInside(true);//坐标数据显示在内测
lineChartData.setAxisXBottom(axisX);
lineChartData.setAxisYLeft(axisY);
lineChartView.setZoomEnabled(false);//是否支持缩放
lineChartView.setValueSelectionEnabled(true);//设置是否可以选中图表中的值,即当点击图表中的数据值后,会一直处于选中状态,直到用户点击其他空间。默认为false。
lineChartView.setLineChartData(lineChartData);
Viewport v = new Viewport(lineChartView.getMaximumViewport());
//Y轴最大值为 加上20、防止显示不全
v.top = maxPoint + 20;
//最小值 Y轴最低点就为0
if(minPoint-100 < 0){
v.bottom = 0;
}else {
v.bottom = minPoint-100;//最小值
}
//设置最大化的viewport (chartdata)后再调用
//这2个属性的设置一定要在lineChart.setMaximumViewport(v);这个方法之后,不然显示的坐标数据是不能左右滑动查看更多数据的
lineChartView.setMaximumViewport(v);
//左边起始位置 轴
v.left = 0;
//如果数据点超过7,显示7个、否则,显示数据本身大小{自己根据需求设置}
if (chartDataItemBeanList.size() > 7) {
// Y轴显示多少数据
v.right = 7;
} else {
v.right = 7;
}
//左右滑动
lineChartView.setCurrentViewport(v);
}
代码调用
initXY();
setLineChartData();