Android MpAndroidChart使用流程和坑--组合图

来源:互联网 发布:win7右下角网络感叹号 编辑:程序博客网 时间:2024/05/19 22:59
CombinedChart

借鉴博客https://github.com/PhilJay/MPAndroidChart
http://www.jianshu.com/p/587946813a78

饼状图可以详见:http://blog.csdn.net/androidwubo/article/details/72922158
柱状图可以详见:http://blog.csdn.net/androidwubo/article/details/72918612
该项目的源码:https://github.com/Orion-wubo/orion

步骤:CombinedChart
1、引用(三种方式,不一一介绍了,看github)
2、根据需求选择相应的表
折线图 LineChart
条形图 BarChart
条形折线图 Combined-Chart
圆饼图 PieChart
雷达图 ScatterChart
K线图 CandleStickChart
泡泡图 BubbleChart
网状图 RadarChart
3、获取相应控件
mChart = (CombinedChart) findViewById(R.id.chart1);
注:设置屏幕横向、全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
4、设置图标
mChart.getDescription().setEnabled(false);
        mChart.setBackgroundColor(Color.WHITE);
        mChart.setDrawGridBackground(false);
        mChart.setDrawBarShadow(false);
        mChart.setHighlightFullBarEnabled(false);

//设置组合图都有那个(官方demo里面有四种,我们需求两种,就用两个,后面的在前面的渲染上面)
        mChart.setDrawOrder(new CombinedChart.DrawOrder[]{
                CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.LINE});

//设置图标说明(这个通用,比较简单,不注释了)
//设置自定义mark(参考第二个博客)


5、设置x、y轴数据(这个基本上都一样)
//x轴数据
        XAxis xAxis = mChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setCenterAxisLabels(true);
        xAxis.setDrawGridLines(false);
        xAxis.setGranularity(1f);
        xAxis.setLabelCount(areaname.length,false);
        xAxis.setAxisMaximum(areaname.length);
        xAxis.setAxisMinimum(0f);
        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return areaname[(int) ((value + areaname.length)%areaname.length)];
            }
        });


        //y轴数据
        IAxisValueFormatter custom = new LeftData();
        YAxis leftAxis = mChart.getAxisLeft();
        leftAxis.setDrawGridLines(true);
        leftAxis.setLabelCount(4, false);
        leftAxis.setValueFormatter(custom);
        leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        leftAxis.setSpaceTop(0f);
        /**
         * 如果设置了最大最小,那么不能动态计算轴的值
         */
        leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
        //        leftAxis.setAxisMaximum(160f);  //动态设置最大,


        IAxisValueFormatter custom2 = new RightData();
        YAxis rightAxis = mChart.getAxisRight();
        rightAxis.setDrawGridLines(false);
        rightAxis.setLabelCount(4, false);
        rightAxis.setValueFormatter(custom2);
        rightAxis.setSpaceTop(0f);
        rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)f
        //        rightAxis.setAxisMaximum(60f);
6、设置数据 (这个和之前的都有所不同)
CombinedData data = new CombinedData();
        data.setData(generateLineData());//设置线性
        data.setData(generateBarData());//设置柱状
  
        mChart.setData(data);
        mChart.invalidate();

//线性
LineData d = new LineData();


ArrayList<Entry> entries = new ArrayList<Entry>();


for (int index = 0; index < areaname.length; index++)
/**
* 这个加0.5f特别重要,这样可以使第一个点从数据中间开始
* 不是从y轴开始
*/
entries.add(new Entry(index + 0.5f, (float) (Math.random() * 20)));


LineDataSet set = new LineDataSet(entries, "巡护面积");
set.setColor(rgb("#2d9660"));
set.setLineWidth(2f);
set.setCircleColor(rgb("#2d9660"));
set.setCircleRadius(5f);
set.setFillColor(rgb("#2d9660"));
set.setMode(LineDataSet.Mode.LINEAR);
set.setDrawValues(true);
set.setValueTextSize(10f);
set.setValueTextColor(rgb("#2d9660"));
set.setAxisDependency(YAxis.AxisDependency.LEFT);


d.addDataSet(set);
return d;
//柱状
ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
ArrayList<BarEntry> yVals2 = new ArrayList<BarEntry>();


/**
* 给每一条设置数据
*/
for (int i = 0; i < areaname.length; i++) {
yVals1.add(new BarEntry(i, (float) (Math.random() * 50)));
yVals2.add(new BarEntry(i, (float) (Math.random() * 50)));
}


BarDataSet set1, set2;
set1 = new BarDataSet(yVals1, "巡护区域");
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
set1.setColor(rgb("##3498db"));
set2 = new BarDataSet(yVals2, "护林员个数");
set2.setColor(rgb("#e74c3c"));
set1.setAxisDependency(YAxis.AxisDependency.LEFT);


float groupSpace = 0.32f;
float barSpace = 0.04f; // x2 DataSet
float barWidth = 0.3f; // x2 DataSet
//这个计算公式是,(barwidh + barspace) * groupcount  + groupspace
// (0.2 + 0.03) * 2 + 0.08 = 1.00 -> interval per "group"


BarData data = new BarData(set1, set2);
data.setBarWidth(barWidth);
data.groupBars(0f, groupSpace, barSpace);
return data;

























阅读全文
0 0
原创粉丝点击