hellocharts-Android图标库

司空温书
2023-12-01

各个属性介绍地址: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'
   }

ColumnChartView-柱状图

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();

LineChartView-折线图

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();
 类似资料: