Newer
Older
MpAndroidChart / MPChartExample / src / com / xxmassdeveloper / mpchartexample / MyChart1Activity.java
bello on 4 Mar 2018 8 KB combined2
package com.xxmassdeveloper.mpchartexample;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;

import com.github.mikephil.charting.charts.CombinedChart;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.xxmassdeveloper.mpchartexample.manage.JsonUtils;
import com.xxmassdeveloper.mpchartexample.manage.P2Data;
import com.xxmassdeveloper.mpchartexample.view.CombinedChart2;

import java.util.ArrayList;

/**
 * @Info
 * @Auth Bello
 * @Time 18-2-5 下午4:42
 * @Ver
 */

public class MyChart1Activity extends FragmentActivity {

    private CombinedChart mChart;

    String v = "{\"msg\":\"操作成功\",\"data\":[{\"sumPlasmaAmount\":2.02,\"plasmaName\":\"保亭\",\"sumGross\":\"1.49\"," +
            "\"tsumGross\":\"0.95\"},{\"sumPlasmaAmount\":11.94,\"plasmaName\":\"巴马\",\"sumGross\":\"11.15\",\"tsumGross\":\"9.72\"}," +
            "{\"sumPlasmaAmount\":12.73,\"plasmaName\":\"全州\",\"sumGross\":\"11.10\",\"tsumGross\":\"11.21\"},{\"sumPlasmaAmount\":11.19," +
            "\"plasmaName\":\"大新\",\"sumGross\":\"10.86\",\"tsumGross\":\"9.08\"},{\"sumPlasmaAmount\":10.29,\"plasmaName\":\"马山\"," +
            "\"sumGross\":\"10.61\",\"tsumGross\":\"9.44\"},{\"sumPlasmaAmount\":7.09,\"plasmaName\":\"琼中\",\"sumGross\":\"5.39\"," +
            "\"tsumGross\":\"4.62\"},{\"sumPlasmaAmount\":4.41,\"plasmaName\":\"白沙\",\"sumGross\":\"3.02\",\"tsumGross\":\"2.66\"}," +
            "{\"sumPlasmaAmount\":13.72,\"plasmaName\":\"大化\",\"sumGross\":\"13.26\",\"tsumGross\":\"12.08\"},{\"sumPlasmaAmount\":0.33," +
            "\"plasmaName\":\"保康\",\"sumGross\":\"0.79\",\"tsumGross\":\"0\"},{\"sumPlasmaAmount\":16.46,\"plasmaName\":\"石门\"," +
            "\"sumGross\":\"17.16\",\"tsumGross\":\"13.29\"},{\"sumPlasmaAmount\":0.59,\"plasmaName\":\"武宁\",\"sumGross\":\"0.91\"," +
            "\"tsumGross\":\"0\"},{\"sumPlasmaAmount\":13.00,\"plasmaName\":\"醴陵\",\"sumGross\":\"12.84\",\"tsumGross\":\"14.39\"}]," +
            "\"error\":\"-1\"}";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_chart1);



        P2Data p2Data = (P2Data) JsonUtils.JsonStrToClass(v, P2Data.class);
        String[] quarters = new String[p2Data.getData().size()];
        ArrayList<Entry> entries1 = new ArrayList<>();
        ArrayList<Entry> entries2 = new ArrayList<>();
        ArrayList<BarEntry> barEntries1 = new ArrayList<>();
        ArrayList<BarEntry> barEntries2 = new ArrayList<>();
        for (int i=0; i<p2Data.getData().size();i++){
            quarters[i] = p2Data.getData().get(i).getPlasmaName();
            //(sumGross-tsumGross)*100  同比增长率
            entries1.add(new Entry(i+0.5f, (Float.parseFloat(p2Data.getData().get(i).getSumGross()) - Float.parseFloat(p2Data.getData().get
                    (i).getTsumGross()))*100));
            entries2.add(new Entry(i+0.5f, (p2Data.getData().get(i).getSumPlasmaAmount() - Float.parseFloat(p2Data.getData
                    ().get
                    (i).getSumGross()))*100));
            barEntries1.add(new BarEntry(i, p2Data.getData().get(i).getSumPlasmaAmount()));
            barEntries2.add(new BarEntry(i, Float.parseFloat(p2Data.getData().get(i).getSumGross())));
        }

        CombinedChart2 mChart = findViewById(R.id.my_chart);
        mChart.setData("双柱无线","", "","实际采浆","计划采浆", "人数","", quarters, null, null, barEntries1, barEntries2);

        CombinedChart2 mChart2 = findViewById(R.id.my_chart2);
        mChart2.setData("双柱单线","同比增长率", "","实际采浆","计划采浆", "人数","%", quarters, entries1, null, barEntries1, barEntries2);

        CombinedChart2 mChart3 = findViewById(R.id.my_chart3);
        mChart3.setData("双柱双线","同比增长率", "计划增长率","实际采浆","计划采浆", "人数","%", quarters, entries1, entries2, barEntries1, barEntries2);


/*

        mChart = findViewById(R.id.my_chart);
        mChart.getDescription().setEnabled(false);
        mChart.setBackgroundColor(Color.WHITE);
        mChart.setDrawGridBackground(false);
        mChart.setDrawBarShadow(false);
        mChart.setHighlightFullBarEnabled(false);
        mChart.setPinchZoom(false);

        mChart.setDrawOrder(new CombinedChart.DrawOrder[]{CombinedChart.DrawOrder.LINE, CombinedChart.DrawOrder.BAR});

        MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
        mv.setChartView(mChart); // For bounds control
        mChart.setMarker(mv); // Set the marker to the chart

        //图例
        Legend l = mChart.getLegend();
        l.setWordWrapEnabled(true);
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        l.setDrawInside(false);


        YAxis rightAxis = mChart.getAxisRight();
        rightAxis.setDrawGridLines(false);
        rightAxis.setAxisMinimum(0f);

        YAxis leftAxis = mChart.getAxisLeft();
        leftAxis.setDrawGridLines(false);
        leftAxis.setAxisMinimum(0f);

        XAxis xAxis = mChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setAxisMinimum(0f);
        xAxis.setGranularity(1f);
        xAxis.setLabelCount(12);
        xAxis.setDrawGridLines(false);
        xAxis.setCenterAxisLabels(true);
        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return String.valueOf((int) value);
            }
        });

        CombinedData data = new CombinedData();
        data.setData(generateLineData());
        data.setData(generateBarData());

        xAxis.setAxisMaximum(data.getXMax() + 0.35f);

        mChart.animateXY(3000, 3000);
        mChart.setData(data);
        mChart.invalidate();

*/

    }


    private LineData generateLineData() {
        LineData d = new LineData();
        ArrayList<Entry> entries = new ArrayList<>();

        for (int index = 0; index < 12; index++)
            entries.add(new Entry(index + 0.5f, (float) (Math.random() * 15) + 25));

        LineDataSet set = new LineDataSet(entries, "Line DataSet");
        set.setColor(Color.LTGRAY);
        set.setLineWidth(0.5f);
        set.setCircleColor(Color.GRAY);
        set.setCircleRadius(0.8f);
        set.setDrawCircles(false);
        set.setFillColor(Color.LTGRAY);
        set.setDrawFilled(true);
        set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        set.setDrawValues(false);
        set.setValueTextSize(10f);
        set.setValueTextColor(Color.rgb(240, 238, 70));
        set.setAxisDependency(YAxis.AxisDependency.LEFT); //以左边Y轴的标签绘制
        d.addDataSet(set);

        return d;
    }

    private BarData generateBarData() {
        ArrayList<BarEntry> entries1 = new ArrayList<>();
        ArrayList<BarEntry> entries2 = new ArrayList<>();

        for (int index = 0; index < 12; index++) {
            entries1.add(new BarEntry(0, (float) (Math.random() * 15) + 20));

            // stacked
            entries2.add(new BarEntry(0, (float) (Math.random() * 13) + 12));
        }

        BarDataSet set1 = new BarDataSet(entries1, "Bar 1");
        set1.setColor(Color.rgb(113, 180, 230));
        set1.setValueTextColor(Color.rgb(60, 220, 78));
        set1.setValueTextSize(10f);
        set1.setAxisDependency(YAxis.AxisDependency.LEFT);

        BarDataSet set2 = new BarDataSet(entries2, "Bar 2");
        set2.setColor(Color.rgb(120, 230, 128));
        set2.setValueTextColor(Color.rgb(60, 220, 78));
        set2.setValueTextSize(10f);
        set2.setAxisDependency(YAxis.AxisDependency.LEFT);

        BarData d = new BarData(set1, set2);
        d.setBarWidth(0.40f);
        d.groupBars(0, 0.15f, 0.02f);

        return d;
    }
}