hellocharts的折线图与柱状图的结合之ComboLineColumnChartView

时间:2023-03-08 23:55:31

哼哼,网上找了半天都不全,所以决定自己写一个完整的可以直接贴代码的

test.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <lecho.lib.hellocharts.view.ComboLineColumnChartView
android:id="@+id/combochart"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
AddColumnLineData.java(专门用于添加数据)
package com.shaoxin.myhellocharts;

import android.graphics.Color;

import java.util.ArrayList;
import java.util.List; import lecho.lib.hellocharts.gesture.ZoomType;
import lecho.lib.hellocharts.model.Axis;
import lecho.lib.hellocharts.model.AxisValue;
import lecho.lib.hellocharts.model.Column;
import lecho.lib.hellocharts.model.ColumnChartData;
import lecho.lib.hellocharts.model.Line;
import lecho.lib.hellocharts.model.LineChartData;
import lecho.lib.hellocharts.model.PointValue;
import lecho.lib.hellocharts.model.SubcolumnValue;
import lecho.lib.hellocharts.model.ValueShape;
import lecho.lib.hellocharts.util.ChartUtils;
import lecho.lib.hellocharts.view.ColumnChartView; import static com.shaoxin.myhellocharts.LineColumn.comboChart; /**
* Created by shaoxin on 2016/12/22.
*/ public class AddColumnLineData { public final static String[] months = new String[]{"Jan", "Feb", "Mar",
"Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",};
public static ColumnChartView columnChart;
public static List<AxisValue> axisValues; //设置折线图,添加设置好的数据
public static LineChartData initLineCharData(List<Line> dataLine) {
LineChartData lineCharData = new LineChartData(dataLine);
//初始化轴
Axis axisX = new Axis().setHasLines(true);
Axis axisY = new Axis().setHasLines(true);
axisX.setName("时间");
axisY.setName("销量");
lineCharData.setAxisYLeft(axisY);
lineCharData.setAxisXBottom(axisX);
return lineCharData;
} //定义方法设置折线图中数据
public static List<Line> initDataLine() {
List<Line> lineList = new ArrayList<>();
List<PointValue> pointValueList = new ArrayList<>(); int numLines = months.length;
for (int i = 0; i < numLines; ++i) {
pointValueList.add(new PointValue(i, (float) Math.random() * 50f + 5));
axisValues.add(new AxisValue(i).setLabel(months[i]));
} Line line = new Line(pointValueList);
line.setColor(Color.RED);
line.setShape(ValueShape.CIRCLE);
line.setHasLabelsOnlyForSelected(true);
lineList.add(line); return lineList;
} //定义方法设置柱状图中数据
public static ColumnChartData initColumnCharData(List<Column> dataLine) {
ColumnChartData columnData = new ColumnChartData(dataLine); columnData.setAxisXBottom(new Axis(axisValues).setHasLines(true)
.setTextColor(Color.BLACK));
columnData.setAxisYLeft(new Axis().setHasLines(true)
.setTextColor(Color.BLACK).setMaxLabelChars(2));
// Set selection mode to keep selected month column highlighted.
comboChart.setValueSelectionEnabled(true);
comboChart.setZoomType(ZoomType.HORIZONTAL); return columnData;
} //定义方法设置柱状图中数据
public static List<Column> initColumnLine() {
List<Column> list = new ArrayList<>();
List<SubcolumnValue> subcolumnValueList;
axisValues = new ArrayList<AxisValue>();
int numSubcolumns = 1;
int numColumns = months.length;
for (int i = 0; i < numColumns; ++i) {
subcolumnValueList = new ArrayList<SubcolumnValue>();
for (int j = 0; j < numSubcolumns; ++j) {
subcolumnValueList.add(new SubcolumnValue((float) Math.random() * 50f + 5,
ChartUtils.pickColor()));
}
// 点击柱状图就展示数据量
axisValues.add(new AxisValue(i).setLabel(months[i]));
list.add(new Column(subcolumnValueList).setHasLabelsOnlyForSelected(true));
}
return list;
} }
LineColumn.java
package com.shaoxin.myhellocharts;

import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity; import java.util.List; import lecho.lib.hellocharts.listener.ComboLineColumnChartOnValueSelectListener;
import lecho.lib.hellocharts.model.Axis;
import lecho.lib.hellocharts.model.Column;
import lecho.lib.hellocharts.model.ColumnChartData;
import lecho.lib.hellocharts.model.ComboLineColumnChartData;
import lecho.lib.hellocharts.model.Line;
import lecho.lib.hellocharts.model.LineChartData;
import lecho.lib.hellocharts.model.PointValue;
import lecho.lib.hellocharts.model.SubcolumnValue;
import lecho.lib.hellocharts.model.Viewport;
import lecho.lib.hellocharts.view.ComboLineColumnChartView; import static com.shaoxin.myhellocharts.AddColumnLineData.axisValues;
import static com.shaoxin.myhellocharts.AddColumnLineData.initColumnCharData;
import static com.shaoxin.myhellocharts.AddColumnLineData.initColumnLine;
import static com.shaoxin.myhellocharts.AddColumnLineData.initDataLine;
import static com.shaoxin.myhellocharts.AddColumnLineData.initLineCharData; /**
* Created by shaoxin on 2016/12/22.
*/ public class LineColumn extends AppCompatActivity {
static ComboLineColumnChartView comboChart; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
comboChart = (ComboLineColumnChartView) findViewById(R.id.combochart); comboChart.setZoomEnabled(true);//设置是否支持缩放
//为图表设置值得触摸事件
//设置值触摸侦听器,将触发图表顶部的变化。
comboChart.setOnValueTouchListener(new ComboLineColumnChartOnValueSelectListener() {
@Override
public void onColumnValueSelected(int i, int i1, SubcolumnValue subcolumnValue) { } @Override
public void onPointValueSelected(int i, int i1, PointValue pointValue) { } @Override
public void onValueDeselected() { }
});
//设置图表是否可以与用户互动
comboChart.setInteractive(true);
//设置图表数据是否选中进行显示
comboChart.setValueSelectionEnabled(true);
//定义组合数据对象
ComboLineColumnChartData comboLineColumnChartData = new ComboLineColumnChartData();
//为图表设置数据,数据类型为ComboLineColumnChartData
comboChart.setComboLineColumnChartData(comboLineColumnChartData); //为组合图设置折现图数据
List<Line> dataLine = initDataLine();
LineChartData lineCharData = initLineCharData(dataLine);
lineCharData.setLines(dataLine);
comboLineColumnChartData.setLineChartData(lineCharData); //为组合图设置柱形图数据
List<Column> dataColumn = initColumnLine();
ColumnChartData columnChartData = initColumnCharData(dataColumn);
columnChartData.setColumns(dataColumn);
comboLineColumnChartData.setColumnChartData(columnChartData); comboLineColumnChartData.setValueLabelsTextColor(Color.BLACK);// 设置数据文字颜色
comboLineColumnChartData.setValueLabelTextSize(25);// 设置数据文字大小
comboLineColumnChartData.setValueLabelTypeface(Typeface.MONOSPACE);// 设置数据文字样式 Axis axisX = new Axis().setHasLines(true);
Axis axisY = new Axis().setHasLines(true);
axisX.setValues(axisValues);
axisY.setTextColor(Color.BLACK);
axisY.setTextColor(Color.BLACK);
comboLineColumnChartData.setAxisYLeft(axisY);
comboLineColumnChartData.setAxisXBottom(axisX);
//comboLineColumnChartData.setAxisYRight(axisYRight);//设置右边显示的轴
//comboLineColumnChartData.setAxisXTop(axisXTop);//设置顶部显示的轴
comboChart.setComboLineColumnChartData(comboLineColumnChartData);//为组合图添加数据 Viewport viewport = initViewPort();
comboChart.setMaximumViewport(viewport);
comboChart.setCurrentViewport(viewport);
} private Viewport initViewPort() {
Viewport viewport = new Viewport();
viewport.top = 60;
viewport.bottom = 0;
viewport.left = -2;
viewport.right = 20; return viewport;
} public static ComboLineColumnChartView getComboLineColumnChartView() {
return comboChart;
}
}

觉得有用的话别忘了评论点个赞啥的,没用就忽略