美文网首页
MPAndroidChart柱状图

MPAndroidChart柱状图

作者: 啤酒小龙虾 | 来源:发表于2018-04-12 17:38 被阅读0次

因为项目要做一个统计收银的页面使用到了柱状图,就在网上找了一些资料,然后做一下记录。

一、MPAndroidChart的引入

repositories {

        maven { url "https://jitpack.io" }

        maven {

                url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'

        }

}

dependencies {

    //添加柱状图

    compile 'com.github.PhilJay:MPAndroidChart:v3.0.3'

}

我将这两个都加在了 app的build.gradle   没有把第一个加在根目录的build.gradle中

二、xml中的操作

柱状图

三、创建BarChart管理类

public class BarChartManager {

    private BarChart mBarChart;

    private YAxis leftAxis;

    private YAxis rightAxis;

    private XAxis xAxis;

    //构造

    public BarChartManager(BarChart barChart) {

        this.mBarChart = barChart;

        leftAxis = mBarChart.getAxisLeft();

        rightAxis = mBarChart.getAxisRight();

        xAxis = mBarChart.getXAxis();

    }

    //初始化

    private void initLineChart() {

        //背景颜色

        mBarChart.setBackgroundColor(Color.WHITE);

        //网格

        mBarChart.setDrawGridBackground(false);

        //背景阴影

        mBarChart.setDrawBarShadow(false);

        mBarChart.setHighlightFullBarEnabled(false);

        //显示边界

        mBarChart.setDrawBorders(true);

        //设置动画效果

        mBarChart.animateY(1000, Easing.EasingOption.Linear);        mBarChart.animateX(1000, Easing.EasingOption.Linear);

        //图例设置 (图表说明文字)

        Legend legend = mBarChart.getLegend();

        legend.setForm(Legend.LegendForm.CIRCLE); //图例窗体的形状 目前是一条线 ,还有 圆圈 方块等形状

        legend.setTextSize(20f); //图例文字的大小

        legend.setTextColor(Color.BLUE); //设置图例文字颜色

        //显示位置

        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); //图例说明文字在图表的上方

        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); //图例左居中

        legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);//图例的方向为水平

        legend.setDrawInside(false);//绘制在chart的外侧

        //XY轴的设置

        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//X轴设置显示位置在底部

        xAxis.setGranularity(1f);//设置最小间隔,防止当放大时,出现重复标签

        xAxis.setTextColor(Color.BLUE);//设置X轴字体颜色

        xAxis.setTextSize(10f); //设置X轴字体大小

        xAxis.setDrawGridLines(false); //不绘制X轴网格,默认为绘制。

        //y轴设置

        leftAxis.setAxisMinimum(0f); //保证Y轴从0开始,不然会上移一点

        rightAxis.setAxisMinimum(0f);

        //将条目放大 可滑动

        mBarChart.invalidate();

        Matrix mMatrix = new Matrix();

        mMatrix.postScale(2f, 1f); //X轴宽度放大2倍 竖直方向不变

        mBarChart.getViewPortHandler().refresh(mMatrix, mBarChart, false);

        mBarChart.animateY(800);

     }

    //展示柱状图单条

    public void showBarChart(List xAxisValues, List yAxisValues, String label, int color) {

        initLineChart(); //首先进项基本数据的初始化

        ArrayList entries = new ArrayList<>();   //将数据源添加到图标

        for (int i = 0; i < xAxisValues.size(); i++) {

            entries.add(new BarEntry(xAxisValues.get(i), yAxisValues.get(i)));

        }

        BarDataSet barDataSet = new BarDataSet(entries, label);

         barDataSet.setColor(color); //摄住柱状图颜色

        barDataSet.setValueTextSize(9f); //设置数值字体大小

        barDataSet.setFormLineWidth(1f); //线条宽度

        barDataSet.setFormSize(15.f); ///图例窗体的大小

        ArrayList dataSets = new ArrayList<>();

        dataSets.add(barDataSet);

        BarData data = new BarData(dataSets);

        xAxis.setLabelCount(entries.size() - 1, false);//设置X轴的刻度数

        mBarChart.setData(data);

    }

    //多条柱状图

    public void showBarChart(List xAxisValues, List> yAxisValues, List labels, List            colours) {

        initLineChart(); //同理

        BarData data = new BarData();

        for (int i = 0; i < yAxisValues.size(); i++) {

            ArrayList entries = new ArrayList<>();

            for (int j = 0; j < yAxisValues.get(i).size(); j++) {

                entries.add(new BarEntry(xAxisValues.get(j), yAxisValues.get(i).get(j)));

            }

            BarDataSet barDataSet = new BarDataSet(entries, labels.get(i));

            barDataSet.setColor(colours.get(i));

            barDataSet.setValueTextColor(colours.get(i));

            barDataSet.setValueTextSize(10f); //设置数值字体大小

            barDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);

            data.addDataSet(barDataSet);

        }

        int amount = yAxisValues.size();

        float groupSpace = 0.12f; //柱状图组之间的间距

        float barSpace = (float) ((1 - 0.12) / amount / 10); // x4 DataSet

        float barWidth = (float) ((1 - 0.12) / amount / 10 * 9); // x4 DataSet

        xAxis.setLabelCount(xAxisValues.size() - 1, false);

        data.setBarWidth(barWidth);

        data.groupBars(0, groupSpace, barSpace);

        mBarChart.setData(data);

    }

}

四:在Activity中使用

多柱状图使用类似

效果图:

相关文章

网友评论

      本文标题:MPAndroidChart柱状图

      本文链接:https://www.haomeiwen.com/subject/ijrfkftx.html