Android MPAndroidChart BarChart

Android MPAndroidChart BarChart

繼續上篇
https://blog.csdn.net/weixin_44889138/article/details/103498294
導入依賴,使用方式,可以參考上上一篇

柱狀圖

在這裏插入圖片描述

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

</LinearLayout>
方法 解釋
setTouchEnabled 設置是否可以觸摸
setDragEnabled 是否可以拖拽
setScaleEnabled 是否可以縮放
setPinchZoom y軸的值是否跟隨圖表變換縮放;如果禁止,y軸的值會跟隨圖表變換縮放
setDrawBarShadow 柱狀圖沒有數據的部分是否顯示陰影效果

使用

  1. setChartData
    偷個懶,沒有重構,寫在一起了

同樣還是要設置對應的Entry

	//設置兩條數據
		final List<BarEntry> value1 = new ArrayList<>();
        BarEntry[] entries = {new BarEntry(0f, 396), new BarEntry(1f, 1089),
                new BarEntry(2f, 963), new BarEntry(3f, 756), new BarEntry(4f, 287)};
        for (int i = 0; i < entries.length; i++) {
            value1.add(entries[i]);
        }

        List<BarEntry> value2 = new ArrayList<>();
        value2.add(new BarEntry(0f, 245));
        value2.add(new BarEntry(1f, 520));
        value2.add(new BarEntry(2f, 504));
        value2.add(new BarEntry(3f, 517));
        value2.add(new BarEntry(4f, 186));
  1. BarDataSet
		BarDataSet set1 = new BarDataSet(value1, "有違章");
        set1.setColor(Color.GREEN);
        set1.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                if ((int) (value % 5) == 0) {
                    return new DecimalFormat("##.0").format((value / (value + 245)) * 100) + "%";
                } else if ((int) (value % 5) == 1) {
                    return new DecimalFormat("##.0").format((value / (value + 520)) * 100) + "%";
                } else if ((int) (value % 5) == 2) {
                    return new DecimalFormat("##.0").format((value / (value + 504)) * 100) + "%";
                } else if ((int) (value % 5) == 3) {
                    return new DecimalFormat("##.0").format((value / (value + 517)) * 100) + "%";
                } else if ((int) (value % 5) == 4) {
                    return new DecimalFormat("##.0").format((value / (value + 186)) * 100) + "%";
                }
                return "";
            }
        });


		BarDataSet set2 = new BarDataSet(value2, "無違章");
        set2.setColor(Color.BLUE);
        set2.setDrawValues(false);

setValueFormatter格式值

  1. setData
		List<IBarDataSet> barDataSets = new ArrayList<>();
        barDataSets.add(set1);
        barDataSets.add(set2);

        BarData barData = new BarData(barDataSets);
        barData.setBarWidth(0.5f);

        mBarChart.setDrawValueAboveBar(false);//柱狀圖上面的數值是否在柱子上面
        mBarChart.setData(barData);
  1. setXAxis
	private void setXAxis() {
        XAxis xAxis = mBarChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        final String[] strings = {"90後", "80後", "70後", "60後", "50後"};
        xAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                return strings[(int) (value % 5)];
            }
        });
        xAxis.setLabelCount(5);
        xAxis.setDrawGridLines(false);
        xAxis.setTextSize(15f);
        xAxis.setTypeface(Typeface.DEFAULT_BOLD); // 加粗字體
    }
  1. setYAxis
	private void setYAxis() {
        YAxis axisRight = mBarChart.getAxisRight();
        axisRight.setEnabled(false);

        YAxis axisLeft = mBarChart.getAxisLeft();
        axisLeft.setAxisMinimum(0); // 最小值爲0
        axisLeft.setAxisMaximum(1200); // 最大值爲1200
        axisLeft.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                return (int) value + "";
            }
        });
    }
  1. setLegend
	private void setLegend() {
        Legend legend = mBarChart.getLegend();
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        legend.setDrawInside(true);
    }

整體代碼

public class MainActivity extends AppCompatActivity {
    private BarChart mBarChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBarChart = findViewById(R.id.bar_chart);

        setXAxis();
        setYAxis();
        setLegend();
        initData();


    }

    private void initData() {
        mBarChart.setExtraOffsets(24f, 48f, 24f, 24f);
        setChartData();

    }

    private void setChartData() {
        final List<BarEntry> value1 = new ArrayList<>();
        BarEntry[] entries = {new BarEntry(0f, 396), new BarEntry(1f, 1089),
                new BarEntry(2f, 963), new BarEntry(3f, 756), new BarEntry(4f, 287)};
        for (int i = 0; i < entries.length; i++) {
            value1.add(entries[i]);
        }

        List<BarEntry> value2 = new ArrayList<>();
        value2.add(new BarEntry(0f, 245));
        value2.add(new BarEntry(1f, 520));
        value2.add(new BarEntry(2f, 504));
        value2.add(new BarEntry(3f, 517));
        value2.add(new BarEntry(4f, 186));

        BarDataSet set1 = new BarDataSet(value1, "有違章");
        set1.setColor(Color.GREEN);
        set1.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                if ((int) (value % 5) == 0) {
                    return new DecimalFormat("##.0").format((value / (value + 245)) * 100) + "%";
                } else if ((int) (value % 5) == 1) {
                    return new DecimalFormat("##.0").format((value / (value + 520)) * 100) + "%";
                } else if ((int) (value % 5) == 2) {
                    return new DecimalFormat("##.0").format((value / (value + 504)) * 100) + "%";
                } else if ((int) (value % 5) == 3) {
                    return new DecimalFormat("##.0").format((value / (value + 517)) * 100) + "%";
                } else if ((int) (value % 5) == 4) {
                    return new DecimalFormat("##.0").format((value / (value + 186)) * 100) + "%";
                }
                return "";
            }
        });


        BarDataSet set2 = new BarDataSet(value2, "無違章");
        set2.setColor(Color.BLUE);
        set2.setDrawValues(false);

        List<IBarDataSet> barDataSets = new ArrayList<>();
        barDataSets.add(set1);
        barDataSets.add(set2);

        BarData barData = new BarData(barDataSets);
        barData.setBarWidth(0.5f);

        mBarChart.setDrawValueAboveBar(false);//柱狀圖上面的數值是否在柱子上面
        mBarChart.setData(barData);
    }

    private void setXAxis() {
        XAxis xAxis = mBarChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        final String[] strings = {"90後", "80後", "70後", "60後", "50後"};
        xAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                return strings[(int) (value % 5)];
            }
        });
        xAxis.setLabelCount(5);
        xAxis.setDrawGridLines(false);
        xAxis.setTextSize(15f);
        xAxis.setTypeface(Typeface.DEFAULT_BOLD); // 加粗字體
    }

    private void setYAxis() {
        YAxis axisRight = mBarChart.getAxisRight();
        axisRight.setEnabled(false);

        YAxis axisLeft = mBarChart.getAxisLeft();
        axisLeft.setAxisMinimum(0); // 最小值爲0
        axisLeft.setAxisMaximum(1200); // 最大值爲1200
        axisLeft.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                return (int) value + "";
            }
        });
    }

    private void setLegend() {
        Legend legend = mBarChart.getLegend();
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        legend.setDrawInside(true);
    }
}

完成

發佈了20 篇原創文章 · 獲贊 6 · 訪問量 4906
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章