zoukankan      html  css  js  c++  java
  • hellocharts的折线图与柱状图的结合之ComboLineColumnChartView

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

    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;
        }
    }

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

  • 相关阅读:
    Orchard源码分析(1):Orchard架构
    抓取网站数据不再是难事了,Fizzler(So Easy)全能搞定
    jQuery版本升级踩坑大全
    ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers
    ASP.NET MVC使用Bootstrap系列(4)——使用JavaScript插件
    ASP.NET MVC使用Bootstrap系统(2)——使用Bootstrap CSS和HTML元素
    ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件
    ASP.NET MVC使用Bootstrap系列(1)——开始使用Bootstrap
    Entity Framework数据库初始化四种策略
    WCF、WebAPI、WCFREST、WebService之间的区别
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/6213813.html
Copyright © 2011-2022 走看看