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

来源:互联网 发布:三步踩网络好听歌曲 编辑:程序博客网 时间:2024/05/19 20:59

其余文章索引:
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 0
原创粉丝点击