第三方圖表庫MPAndroidChart的使用
阿新 • • 發佈:2019-01-07
折線圖
@Override protected void initData() { mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf"); //設定當前折線圖的描述 lineChart.setDescription("LOL進入世界總決賽"); //是否繪製網格佈局 lineChart.setDrawGridBackground(false); //獲取X軸 XAxis xAxis = lineChart.getXAxis(); //顯示x軸顯示的位置 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); //顯示x軸的字型 xAxis.setTypeface(mTf); //是否繪製x軸網格線 xAxis.setDrawGridLines(false); //是否繪製x軸的軸線 xAxis.setDrawAxisLine(true); //獲取左邊Y軸物件 YAxis leftAxis = lineChart.getAxisLeft(); //顯示y軸的字型 leftAxis.setTypeface(mTf); //引數1:左邊y軸提供的區間的個數 引數2:是否均勻分佈這幾個區間,false代表均勻分佈 leftAxis.setLabelCount(5, false); //獲取右邊Y軸座標 YAxis rightAxis = lineChart.getAxisRight(); //設定右邊Y軸的字型 rightAxis.setTypeface(mTf); rightAxis.setLabelCount(5, false); //將右邊Y軸設定為不顯示的 rightAxis.setDrawGridLines(false); // 提供折線資料(通常情況下,資料來自於伺服器) lineChart.setData(generateDataLine(1)); //設定動畫和時間 lineChart.animateX(750); } private LineData generateDataLine(int cnt) { ArrayList<Entry> e1 = new ArrayList<Entry>(); for (int i = 0; i < 12; i++) { e1.add(new Entry((int) (Math.random() * 65) + 40, i)); } LineDataSet d1 = new LineDataSet(e1, "New DataSet " + cnt + ", (1)"); //設定折線的寬度 d1.setLineWidth(2.5f); //設定小圓圈的寬度 d1.setCircleSize(4.5f); //設定高亮的顏色 d1.setHighLightColor(Color.rgb(244, 117, 117)); //是否顯示小圓圈對應的資料 d1.setDrawValues(false); //折線1 ArrayList<Entry> e2 = new ArrayList<Entry>(); for (int i = 0; i < 12; i++) { e2.add(new Entry(e1.get(i).getVal() - 30, i)); } //折線2 LineDataSet d2 = new LineDataSet(e2, "New DataSet " + cnt + ", (2)"); d2.setLineWidth(2.5f); d2.setCircleSize(4.5f); d2.setHighLightColor(Color.rgb(244, 117, 117)); d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]); d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]); d2.setDrawValues(false); ArrayList<LineDataSet> sets = new ArrayList<LineDataSet>(); sets.add(d1); sets.add(d2); LineData cd = new LineData(getMonths(), sets); return cd; } private ArrayList<String> getMonths() { ArrayList<String> m = new ArrayList<String>(); m.add("Jan"); m.add("Feb"); m.add("Mar"); m.add("Apr"); m.add("May"); m.add("Jun"); m.add("Jul"); m.add("Aug"); m.add("Sep"); m.add("Okt"); m.add("Nov"); m.add("Dec"); return m; }
柱狀圖
@Override protected void initData() { mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf"); barChart.setDescription("華為手機的銷售額"); barChart.setDrawGridBackground(false); //是否繪製柱狀圖的背景 barChart.setDrawBarShadow(false); XAxis xAxis =barChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setTypeface(mTf); xAxis.setDrawGridLines(false); xAxis.setDrawAxisLine(true); YAxis leftAxis =barChart.getAxisLeft(); leftAxis.setTypeface(mTf); leftAxis.setLabelCount(5, false); //設定最大值距離頂部的距離 leftAxis.setSpaceTop(20f); YAxis rightAxis =barChart.getAxisRight(); rightAxis.setTypeface(mTf); rightAxis.setLabelCount(5, false); rightAxis.setSpaceTop(20f); BarData barData = generateDataBar(1); barData.setValueTypeface(mTf); // set data barChart.setData( barData); // 設定Y軸物件動畫 barChart.animateY(700); } private BarData generateDataBar(int cnt) { ArrayList<BarEntry> entries = new ArrayList<BarEntry>(); for (int i = 0; i < 12; i++) { entries.add(new BarEntry((int) (Math.random() * 70) + 30, i)); } BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt); //設定相鄰的柱狀圖之間的距離 d.setBarSpacePercent(20f); d.setColors(ColorTemplate.VORDIPLOM_COLORS); //設定高亮的透明度 d.setHighLightAlpha(255); BarData cd = new BarData(getMonths(), d); return cd; } private ArrayList<String> getMonths() { ArrayList<String> m = new ArrayList<String>(); m.add("Jan"); m.add("Feb"); m.add("Mar"); m.add("Apr"); m.add("May"); m.add("Jun"); m.add("Jul"); m.add("Aug"); m.add("Sep"); m.add("Okt"); m.add("Nov"); m.add("Dec"); return m; }
餅圖
@Override protected void initData() { //字型庫 mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf"); pieChart.setDescription("Android廠商2017年手機佔有率"); //最內層圓的半徑 pieChart.setHoleRadius(52f); //包裹內層圓的半徑 pieChart.setTransparentCircleRadius(57f); //設定中央字型 pieChart.setCenterText("Android\n廠商佔比"); pieChart.setCenterTextTypeface(mTf); pieChart.setCenterTextSize(18f); //是否顯示百分比,true:各部分的百分比和是100% pieChart.setUsePercentValues(true); PieData pieData = generateDataPie(1); //設定樣式為百分比 pieData.setValueFormatter(new PercentFormatter()); pieData.setValueTypeface(mTf); pieData.setValueTextSize(11f); pieData.setValueTextColor(Color.RED); pieChart.setData(pieData); //獲取右上角描述結構的物件 Legend l = pieChart.getLegend(); l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART); l.setYEntrySpace(0f);//相鄰的entry在y軸上的間距 l.setYOffset(30f);//設定第一個entry距離頂部的距離 pieChart.animateXY(900, 900); } private PieData generateDataPie(int cnt) { ArrayList<Entry> entries = new ArrayList<Entry>(); for (int i = 0; i < 4; i++) { entries.add(new Entry((int) (Math.random() * 70) + 30, i)); } PieDataSet d = new PieDataSet(entries, ""); //相鄰模組的間距 d.setSliceSpace(2f); d.setColors(ColorTemplate.VORDIPLOM_COLORS); PieData cd = new PieData(getQuarters(), d); return cd; } private ArrayList<String> getQuarters() { ArrayList<String> q = new ArrayList<String>(); q.add("三星"); q.add("華為"); q.add("vivo"); q.add("OPPO"); return q; }