MPAndroidChart开源图表框架—-柱状图(二)

其余文章索引:
MPAndroidChart 的第一篇介绍 和MPAndroidChart开源图表框架—-折线图(一)

今天抽时间整理了下 MPAndroidChart开源图表框架—-柱状图(二)
下边基本上都是Demo项目中的源码,然后在代码中添加一些注释,方便理解。
效果图:柱状图

开始柱状图的编写功能:

第一步:在xml文件中创建布局


    <com.github.mikephil.charting.charts.BarChart
        android:id="@+id/barChart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/chart_color_2D2D2D" />

然后在Activity中,设置BarChart

/**
 * Created by nan on 2016/4/27.
 */
public class BarChartActivity extends Activity {
    private BarChart mCombinedChart;
    private CombinedBarChartUtil mCombinedChartUtil;
    //第一个值:节点 第二个值:起始值 第三个值:结束值
    private final int mCount = 20;
    private final float minValue = 50000;
    private final float maxValue = 100000;

    //yVals1:蓝色折线的数据 //yVals2:灰色折线的数据
    private ArrayList<BarEntry> yVals1;
    private ArrayList<BarEntry> yVals2;

    public static final String[] mDateTime = new String[]{
            "2016-03-01", "2016-04-02", "2016-03-03", "2016-04-03", "2016-03-03",
            "2016-06-03", "2016-06-03", "2016-07-03", "2016-08-03", "2016-03-03",
            "2016-04-03", "2016-03-03", "2016-04-03", "2016-03-03", "2016-04-03",
            "2016-06-03", "2016-07-03", "2016-08-03", "2016-08-03", "2016-06-03"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_combined_barchart);
        mCombinedChart = (BarChart) findViewById(R.id.combinedChart);
        setGrayValue();
        initData();
    }


    /**
     * 初始化数据
     */
    private void initData() {
        mCombinedChartUtil = new CombinedBarChartUtil(this);
        mCombinedChartUtil.setRule(mCount, minValue, maxValue);
        mCombinedChartUtil.setBackgroundColor(R.color.chart_color_2D2D2D);
        mCombinedChartUtil.setMianCombinedChart(mCombinedChart, yVals1, yVals2);
    }

    /**
     * 【功能描述】  :设置折线的数据
     * 【修改时间】  :2016/3/17 14:37
     */
    private void setGrayValue() {
        yVals1 = new ArrayList<BarEntry>();
        for (int i = 0; i < mCount; i++) {
            yVals1.add(new BarEntry(getRandom(maxValue / 2, minValue), i, mDateTime[i]));
        }
        yVals2 = new ArrayList<BarEntry>();
        for (int i = 0; i < mCount; i++) {
            yVals2.add(new BarEntry(getRandom(maxValue / 2, minValue), i, mDateTime[i]));
        }
    }


    /**
     * 【功能描述】  :产生随机数
     * 【参数列表】  :range 范围
     * 【返回值】    :返回产生的随机数
     * 【修改时间】  :2016/3/17 14:40
     */
    private float getRandom(float range, float startsfrom) {
        return (float) (Math.random() * range) + startsfrom;
    }
}

封装BarChart设置的工具类

/**
 * Created by nan on 2016/1/28.
 * <p/>
 * 折线和柱状图结合
 */
public class CombinedBarChartUtil extends BaseChartUtil {

    private Context mContext;
    private int backgroundColor;

    private int mCount;
    private float minValue;
    private float maxValue;


    public CombinedBarChartUtil(Context context) {
        this.mContext = context;
    }


    /**
     * Bar Chart  工具类
     * 2016--01--29
     * Demo中主要在listview中显示折线图
     * 第一个参数:节点 第二个参数:起始值 第三个参数:结束值
     *
     * @param mCount
     * @param minValue
     * @param maxValue
     */
    public void setRule(int mCount, float minValue, float maxValue) {
        this.mCount = mCount;
        this.minValue = minValue;
        this.maxValue = maxValue;
    }

    public void setMianCombinedChart(BarChart mCombinedChart, ArrayList<BarEntry> lineEntries, ArrayList<BarEntry> barEntries) {
        // 图表为空时显示
        mCombinedChart.setNoDataTextDescription("暂时没有数据进行图表展示");
        mCombinedChart.setDescription("");
        mCombinedChart.setBackgroundColor(Color.WHITE);
        mCombinedChart.setDrawBorders(false);//是否画边框
        mCombinedChart.setDrawGridBackground(false);
        mCombinedChart.setDrawBarShadow(false);
        mCombinedChart.setScaleYEnabled(false);
        mCombinedChart.setDoubleTapToZoomEnabled(false);
        mCombinedChart.setBackgroundColor(getColor(mContext, backgroundColor));
        /*         * 获取头部信息         */
        setLegend(mCombinedChart.getLegend(), true);
        /*          *Y轴 右侧数据设置     */
        setyAxis(mCombinedChart.getAxisRight(), false);
        /*          *Y轴 左侧数据设置     */
        setLeftYAxis(mCombinedChart.getAxisLeft(), true, maxValue, minValue);
        /*          *X轴    数据设置      */
        setxAxis(mCombinedChart.getXAxis(), true);
        /*           *设置数据            */

        ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
        dataSets.add(generateBarData(barEntries));
        dataSets.add(generateBarData1(lineEntries));//设置折现图数据


        BarData data = new BarData(BarChartActivity.mDateTime, dataSets);
        data.setValueTextSize(10f);
        data.setGroupSpace(200f);//调节柱状图粗细 值越大越细
        mCombinedChart.setData(data);
        mCombinedChart.setDrawHighlightArrow(true);

        mCombinedChart.invalidate();
    }

    private LineData generateLineDatas(ArrayList<Entry> entries) {
        LineData d = new LineData();
        LineDataSet set = new LineDataSet(entries, "Line DataSet");
        set.setColor(getColor(mContext, R.color.chart_color_8E8E8E));
        set.setCircleColor(getColor(mContext, R.color.chart_color_8E8E8E));
        set.setLineWidth(1f);
        set.setCircleSize(1f);
        set.setDrawValues(false);
        set.setHighlightEnabled(true); //设置十字线 是否启用
        set.setHighLightColor(Color.TRANSPARENT);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        d.addDataSet(set);
        return d;
    }

    private BarDataSet generateBarData(ArrayList<BarEntry> entries) {
        BarDataSet set = new BarDataSet(entries, "Bar");
        set.setColor(getColor(mContext, R.color.color_login_079752));
        set.setValueTextColor(getColor(mContext, R.color.color_login_079752));
        set.setDrawValues(false);
        set.setHighlightEnabled(true); //设置十字线 是否启用
        set.setHighLightColor(getColor(mContext, R.color.color_login_079752));
        set.setHighLightAlpha(50);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        return set;
    }

    private BarDataSet generateBarData1(ArrayList<BarEntry> entries) {
        BarDataSet set = new BarDataSet(entries, "Bar DataSet");
        set.setColor(getColor(mContext, R.color.chart_color_234C68));
        set.setValueTextColor(getColor(mContext, R.color.chart_color_234C68));
        set.setDrawValues(false);
        set.setHighlightEnabled(true); //设置十字线 是否启用
        set.setHighLightColor(getColor(mContext, R.color.chart_color_234C68));
        set.setHighLightAlpha(50);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);

        return set;
    }

    private void setAnimEnable(CombinedChart mCombinedChart, boolean animEnable) {
        if (animEnable) {
            mCombinedChart.animateY(1500); //执行动画
        }
    }

    public void setBackgroundColor(int color) {
        this.backgroundColor = color;
    }
}

封装图表 公共类


/**
 * Created by nan on 2016/2/1.
 * <p/>
 * chart base
 */
public class BaseChartUtil {

    protected boolean mAxisLeft;
    protected boolean mAxisRight;
    protected boolean mXAxis;
    protected boolean mYAxis;

    protected String[] mMonths = new String[]{
            "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"
    };


    protected String[] mParties = new String[]{
            "Party A", "Party B", "Party C", "Party D", "Party E", "Party F", "Party G", "Party H",
            "Party I", "Party J", "Party K", "Party L", "Party M", "Party N", "Party O", "Party P",
            "Party Q", "Party R", "Party S", "Party T", "Party U", "Party V", "Party W", "Party X",
            "Party Y", "Party Z"
    };


    protected int[] color = {Color.TRANSPARENT, Color.TRANSPARENT};

    protected String[] lable = {"", ""};

    /**
     * 设置 左边轴 是否显示
     *
     * @param axisLeft
     * @return
     */
    public void setAxisLeft(boolean axisLeft) {
        this.mAxisLeft = axisLeft;
    }

    /**
     * 设置 右边轴 是否显示
     *
     * @param axisRight
     * @return
     */
    public void setAxisRight(boolean axisRight) {
        this.mAxisRight = axisRight;
    }

    /**
     * 设置 x表格是否显示
     *
     * @param xAxis
     * @return
     */
    public void setXAxis(boolean xAxis) {
        this.mXAxis = xAxis;
    }

    /**
     * 设置 y表格是否显示
     *
     * @param yAxis
     * @return
     */
    public void setYAxis(boolean yAxis) {
        this.mYAxis = yAxis;
    }


    /**
     * 设置表头样式    这个是折线表头样式
     *
     * @param l
     * @param LegendEnabled 是否显示  false:不显示   true:显示
     */


    public void setLegend(Legend l, boolean LegendEnabled) {
        if (LegendEnabled) {
            l.setTextColor(Color.TRANSPARENT);
            l.setCustom(color, lable);
            l.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT);
            l.setForm(Legend.LegendForm.LINE);
        }
        l.setEnabled(LegendEnabled);
    }

    /**
     * /设置左边样式
     *
     * @param leftAxis
     * @param yAxisEnabled false:不显示   true:显示
     * @param maxValue     最大显示值
     * @param minValue     最小显示值
     */
    public void setLeftYAxis(YAxis leftAxis, boolean yAxisEnabled, float maxValue, float minValue) {
        if (yAxisEnabled) {
            leftAxis.setStartAtZero(false);
            leftAxis.setAxisMaxValue(maxValue * CustomConstant.SET_MAXVALUE);
            leftAxis.setAxisMinValue(minValue * CustomConstant.SET_MINVALUE);
            leftAxis.setTextColor(Color.WHITE);
            leftAxis.setDrawAxisLine(true);
            //颠倒显示
            //leftAxis.setInverted(true);
            //显示Y轴的坐标数 true:按平均值  false:按整数 y-axis max = 25, min = 2, default: 6,
            leftAxis.setLabelCount(6, true);
        }
        leftAxis.setEnabled(yAxisEnabled);
    }


    /**
     * /设置x 表格
     *
     * @param yAxis
     * @param yAxisEnabled false:不显示   true:显示
     */
    public void setyAxis(YAxis yAxis, boolean yAxisEnabled) {
        if (yAxisEnabled) {
            yAxis.setDrawAxisLine(true);
            yAxis.setDrawGridLines(true);
        }
        yAxis.setEnabled(yAxisEnabled);
    }

    /**
     * /设置X 日期样式
     *
     * @param xAxis
     * @param xAxisEnabled false:不显示   true:显示
     */
    public void setxAxis(XAxis xAxis, boolean xAxisEnabled) {
        if (xAxisEnabled) {
            xAxis.setTextColor(Color.WHITE);
            xAxis.setDrawGridLines(false);
            xAxis.setAvoidFirstLastClipping(true);
            xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        }
        xAxis.setEnabled(xAxisEnabled);
    }


    /**
     * 设置数据
     */
//    public abstract void setData();
    public LineData setLineData(LineData lineData, boolean lineDataEnabled) {
        if (lineDataEnabled) {
            lineData.setValueTextColor(Color.WHITE);
            lineData.setValueTextSize(9f);
            // 设置折线上显示数据的格式。如果不设置,将默认显示float数据格式。
//            lineData.setValueFormatter(new ValueFormatter() {
//                @Override
//                public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
//                    int n = (int) value;
//                    String str = n + "℃";
//                    return str;
//                }
//            });
        }
        lineData.setDrawValues(lineDataEnabled);
        return lineData;
    }


    /**
     * 设置颜色
     *
     * @param context
     * @param color
     * @return
     */
    public int getColor(Context context, int color) {
        if (context != null && color != 0) {
            return context.getResources().getColor(color);
        }
        return 0x00ffffff;
    }

分享个返利程序,可以赚点零花钱。

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值