一。加入依賴庫,在項目build.gradle下面的dependencies裏面加入:
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
二。因爲網上資源比較多,註釋也比較清楚,就直接貼上所有代碼
1.兩個管理類
public class LineChartManager { private LineChart lineChart; private YAxis leftAxis; //左邊Y軸 private YAxis rightAxis; //右邊Y軸 private XAxis xAxis; //X軸 public LineChartManager(LineChart mLineChart) { this.lineChart = mLineChart; leftAxis = lineChart.getAxisLeft(); rightAxis = lineChart.getAxisRight(); rightAxis.setDrawLabels(false);//右側Y軸數據不顯示 xAxis = lineChart.getXAxis(); } /** * 初始化LineChart */ private void initLineChart() { lineChart.setDrawGridBackground(false); //顯示邊界 lineChart.setDrawBorders(true); //設置動畫效果 lineChart.animateY(1000, Easing.EasingOption.Linear); lineChart.animateX(1000, Easing.EasingOption.Linear); //折線圖例 標籤 設置 Legend legend = lineChart.getLegend(); legend.setForm(Legend.LegendForm.LINE); legend.setTextSize(11f); //顯示位置 legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); legend.setDrawInside(false); //XY軸的設置 //X軸設置顯示位置在底部 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setAxisMinimum(0f); xAxis.setGranularity(1f); //保證Y軸從0開始,不然會上移一點 leftAxis.setAxisMinimum(0f); rightAxis.setAxisMinimum(0f); } /** * 初始化曲線 每一個LineDataSet代表一條線 * * @param lineDataSet * @param color * @param mode 折線圖是否填充 */ private void initLineDataSet(LineDataSet lineDataSet, int color, boolean mode) { lineDataSet.setColor(color); lineDataSet.setCircleColor(color); lineDataSet.setLineWidth(1f); lineDataSet.setCircleRadius(3f); //設置曲線值的圓點是實心還是空心 lineDataSet.setDrawCircleHole(false); lineDataSet.setValueTextSize(9f); //設置折線圖填充 lineDataSet.setDrawFilled(mode); lineDataSet.setFormLineWidth(1f); lineDataSet.setFormSize(15.f); //填充顏色.透明度 // lineDataSet.setFillColor(Color.BLUE); lineDataSet.setFillAlpha(35); //線模式爲圓滑曲線(默認折線) lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); } /** * 展示折線圖(一條) * * @param xAxisValues * @param yAxisValues * @param label * @param color */ public void showLineChart(List<Float> xAxisValues, List<Float> yAxisValues, String label, int color) { initLineChart(); ArrayList<Entry> entries = new ArrayList<>(); for (int i = 0; i < xAxisValues.size(); i++) { entries.add(new Entry(xAxisValues.get(i), yAxisValues.get(i))); } // 每一個LineDataSet代表一條線 LineDataSet lineDataSet = new LineDataSet(entries, label); initLineDataSet(lineDataSet, color, true); ArrayList<ILineDataSet> dataSets = new ArrayList<>(); dataSets.add(lineDataSet); LineData data = new LineData(dataSets); //設置X軸的刻度數 xAxis.setLabelCount(xAxisValues.size(), true); lineChart.setData(data); } /** * 展示線性圖(多條) * * @param xAxisValues * @param yAxisValues 多條曲線Y軸數據集合的集合 * @param labels * @param colours */ public void showLineChart(List<Float> xAxisValues, List<List<Float>> yAxisValues, List<String> labels, List<Integer> colours) { initLineChart(); ArrayList<ILineDataSet> dataSets = new ArrayList<>(); for (int i = 0; i < yAxisValues.size(); i++) { ArrayList<Entry> entries = new ArrayList<>(); for (int j = 0; j < yAxisValues.get(i).size(); j++) { if (j >= xAxisValues.size()) { j = xAxisValues.size() - 1; } entries.add(new Entry(xAxisValues.get(j), yAxisValues.get(i).get(j))); } LineDataSet lineDataSet = new LineDataSet(entries, labels.get(i)); initLineDataSet(lineDataSet, colours.get(i), false); dataSets.add(lineDataSet); } LineData data = new LineData(dataSets); xAxis.setLabelCount(xAxisValues.size(), true); lineChart.setData(data); } /** * 設置Y軸值 * * @param max * @param min * @param labelCount */ public void setYAxis(float max, float min, int labelCount) { if (max < min) { return; } leftAxis.setAxisMaximum(max); leftAxis.setAxisMinimum(min); leftAxis.setLabelCount(labelCount, false); rightAxis.setAxisMaximum(max); rightAxis.setAxisMinimum(min); rightAxis.setLabelCount(labelCount, false); lineChart.invalidate(); } /** * 設置X軸的值 * * @param max * @param min * @param labelCount */ public void setXAxis(float max, float min, int labelCount) { xAxis.setAxisMaximum(max); xAxis.setAxisMinimum(min); xAxis.setLabelCount(labelCount, true); lineChart.invalidate(); } /** * 設置高限制線 * * @param high * @param name */ public void setHightLimitLine(float high, String name, int color) { if (name == null) { name = "高限制線"; } LimitLine hightLimit = new LimitLine(high, name); hightLimit.setLineWidth(2f); hightLimit.setTextSize(10f); hightLimit.setLineColor(color); hightLimit.setTextColor(color); leftAxis.addLimitLine(hightLimit); lineChart.invalidate(); } /** * 設置低限制線 * * @param low * @param name */ public void setLowLimitLine(int low, String name) { if (name == null) { name = "低限制線"; } LimitLine hightLimit = new LimitLine(low, name); hightLimit.setLineWidth(4f); hightLimit.setTextSize(10f); leftAxis.addLimitLine(hightLimit); lineChart.invalidate(); } /** * 設置描述信息 * * @param str */ public void setDescription(String str) { Description description = new Description(); description.setText(str); lineChart.setDescription(description); lineChart.invalidate(); } }
public class BarChartManager { private BarChart mBarChart; private YAxis leftAxis; private YAxis rightAxis; private XAxis xAxis; private HorizontalBarChart horizontalBarChart; public BarChartManager(BarChart barChart) { this.mBarChart = barChart; leftAxis = mBarChart.getAxisLeft(); rightAxis = mBarChart.getAxisRight(); rightAxis.setDrawLabels(false);//右側Y軸數據不顯示 xAxis = mBarChart.getXAxis(); } public BarChartManager(HorizontalBarChart barChart) { this.horizontalBarChart = barChart; leftAxis = horizontalBarChart.getAxisLeft(); rightAxis = horizontalBarChart.getAxisRight(); rightAxis.setDrawLabels(false);//右側Y軸數據不顯示 xAxis = horizontalBarChart.getXAxis(); } /** * 初始化LineChart */ private void initLineChart() { //背景顏色 mBarChart.setBackgroundColor(Color.WHITE); //網格 mBarChart.setDrawGridBackground(false); //背景陰影 mBarChart.setDrawBarShadow(false); mBarChart.setHighlightFullBarEnabled(false); //顯示邊界 mBarChart.setDrawBorders(true); //設置動畫效果 mBarChart.animateY(1000, Easing.EasingOption.Linear); mBarChart.animateX(1000, Easing.EasingOption.Linear); //折線圖例 標籤 設置 Legend legend = mBarChart.getLegend(); legend.setForm(Legend.LegendForm.LINE); legend.setTextSize(11f); //顯示位置 legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); legend.setDrawInside(false); //XY軸的設置 //X軸設置顯示位置在底部 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setGranularity(1f); //保證Y軸從0開始,不然會上移一點 leftAxis.setAxisMinimum(0f); rightAxis.setAxisMinimum(0f); } /** * 初始化LineChart */ private void initHorizontalBarChart() { //背景顏色 horizontalBarChart.setBackgroundColor(Color.WHITE); //網格 horizontalBarChart.setDrawGridBackground(false); //背景陰影 horizontalBarChart.setDrawBarShadow(false); horizontalBarChart.setHighlightFullBarEnabled(false); //顯示邊界 horizontalBarChart.setDrawBorders(true); //設置動畫效果 horizontalBarChart.animateY(1000, Easing.EasingOption.Linear); horizontalBarChart.animateX(1000, Easing.EasingOption.Linear); //折線圖例 標籤 設置 Legend legend = horizontalBarChart.getLegend(); legend.setForm(Legend.LegendForm.LINE); legend.setTextSize(11f); //顯示位置 legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); legend.setDrawInside(false); //XY軸的設置 //X軸設置顯示位置在底部 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setGranularity(1f); //保證Y軸從0開始,不然會上移一點 leftAxis.setAxisMinimum(0f); rightAxis.setAxisMinimum(0f); } /** * 展示柱狀圖(一條) * * @param xAxisValues * @param yAxisValues * @param label * @param color */ public void showBarChart(List<Float> xAxisValues, List<Float> yAxisValues, String label, int color) { initLineChart(); ArrayList<BarEntry> entries = new ArrayList<>(); for (int i = 0; i < xAxisValues.size(); i++) { entries.add(new BarEntry(xAxisValues.get(i), yAxisValues.get(i))); } // 每一個BarDataSet代表一類柱狀圖 BarDataSet barDataSet = new BarDataSet(entries, label); barDataSet.setColor(color); barDataSet.setValueTextSize(9f); barDataSet.setFormLineWidth(1f); barDataSet.setFormSize(15.f); ArrayList<IBarDataSet> dataSets = new ArrayList<>(); dataSets.add(barDataSet); BarData data = new BarData(dataSets); //設置X軸的刻度數 xAxis.setLabelCount(xAxisValues.size() - 1, false); mBarChart.setData(data); } /** * 展示柱狀圖(一條/橫向) * * @param xAxisValues * @param yAxisValues * @param label * @param color */ public void showHorizontalBarChart(List<Float> xAxisValues, List<Float> yAxisValues, String label, int color) { initHorizontalBarChart(); ArrayList<BarEntry> entries = new ArrayList<>(); for (int i = 0; i < xAxisValues.size(); i++) { entries.add(new BarEntry(xAxisValues.get(i), yAxisValues.get(i))); } // 每一個BarDataSet代表一類柱狀圖 BarDataSet barDataSet = new BarDataSet(entries, label); barDataSet.setColor(color); barDataSet.setValueTextSize(9f); barDataSet.setFormLineWidth(1f); barDataSet.setFormSize(15.f); ArrayList<IBarDataSet> dataSets = new ArrayList<>(); dataSets.add(barDataSet); BarData data = new BarData(dataSets); //設置X軸的刻度數 xAxis.setLabelCount(xAxisValues.size() - 1, false); horizontalBarChart.setData(data); } /** * 展示柱狀圖(多條) * * @param xAxisValues * @param yAxisValues * @param labels * @param colours */ public void showBarChart(List<Float> xAxisValues, List<List<Float>> yAxisValues, List<String> labels, List<Integer> colours) { initLineChart(); BarData data = new BarData(); for (int i = 0; i < yAxisValues.size(); i++) { ArrayList<BarEntry> entries = new ArrayList<>(); for (int j = 0; j < yAxisValues.get(i).size(); j++) { entries.add(new BarEntry(xAxisValues.get(j), yAxisValues.get(i).get(j))); } BarDataSet barDataSet = new BarDataSet(entries, labels.get(i)); barDataSet.setColor(colours.get(i)); barDataSet.setValueTextColor(colours.get(i)); barDataSet.setValueTextSize(10f); barDataSet.setAxisDependency(YAxis.AxisDependency.LEFT); data.addDataSet(barDataSet); } int amount = yAxisValues.size(); float groupSpace = 0.12f; //柱狀圖組之間的間距 float barSpace = (float) ((1 - 0.12) / amount / 10); // x4 DataSet float barWidth = (float) ((1 - 0.12) / amount / 10 * 9); // x4 DataSet // (0.2 + 0.02) * 4 + 0.08 = 1.00 -> interval per "group" xAxis.setLabelCount(xAxisValues.size() - 1, false); data.setBarWidth(barWidth); data.groupBars(0, groupSpace, barSpace); mBarChart.setData(data); } /** * 設置Y軸值 * * @param max * @param min * @param labelCount */ public void setYAxis(float max, float min, int labelCount) { if (max < min) { return; } leftAxis.setAxisMaximum(max); leftAxis.setAxisMinimum(min); leftAxis.setLabelCount(labelCount, false); rightAxis.setAxisMaximum(max); rightAxis.setAxisMinimum(min); rightAxis.setLabelCount(labelCount, false); if (mBarChart != null) { mBarChart.invalidate(); } if (horizontalBarChart != null) { horizontalBarChart.invalidate(); } } /** * 設置X軸的值 * * @param max * @param min * @param labelCount */ public void setXAxis(float max, float min, int labelCount) { xAxis.setAxisMaximum(max); xAxis.setAxisMinimum(min); xAxis.setLabelCount(labelCount, false); if (mBarChart != null) { mBarChart.invalidate(); } if (horizontalBarChart != null) { horizontalBarChart.invalidate(); } } /** * 設置高限制線 * * @param high * @param name */ public void setHightLimitLine(float high, String name, int color) { if (name == null) { name = "高限制線"; } LimitLine hightLimit = new LimitLine(high, name); hightLimit.setLineWidth(4f); hightLimit.setTextSize(10f); hightLimit.setLineColor(color); hightLimit.setTextColor(color); leftAxis.addLimitLine(hightLimit); mBarChart.invalidate(); } /** * 設置低限制線 * * @param low * @param name */ public void setLowLimitLine(int low, String name) { if (name == null) { name = "低限制線"; } LimitLine hightLimit = new LimitLine(low, name); hightLimit.setLineWidth(4f); hightLimit.setTextSize(10f); leftAxis.addLimitLine(hightLimit); mBarChart.invalidate(); } /** * 設置描述信息 * * @param str */ public void setDescription(String str) { Description description = new Description(); description.setText(str); if (mBarChart != null) { mBarChart.setDescription(description); mBarChart.invalidate(); } if (horizontalBarChart != null) { horizontalBarChart.setDescription(description); horizontalBarChart.invalidate(); } } }
2.MAinActivity裏面使用:
public class MainActivity extends AppCompatActivity { public static final String TAG = "MainActivity"; //曲線圖 private LineChart lineChart1;//曲線圖帶限制線 private LineChartManager lineChartManager1; private LineChart lineChart2;//多條曲線 private LineChartManager lineChartManager2; //柱狀圖 private BarChart barChart1;//縱向 private BarChartManager barChartManager1; private BarChart barChart2; private BarChartManager barChartManager2; private HorizontalBarChart horizontalBarChart;//橫向 private BarChartManager barChartManager3; //餅狀圖 private PieChart pieChart1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setLineChartData(); //柱狀圖 setBarChart(); //餅狀圖 setPieChart(); } private void setPieChart() { pieChart1.setUsePercentValues(true);//使用百分百顯示 pieChart1.setDrawCenterText(true); pieChart1.setCenterText("中間文字"); pieChart1.setCenterTextColor(Color.BLUE); pieChart1.setCenterTextSize(16f); pieChart1.setDrawHoleEnabled(true);//是否顯示圓環中間的洞 pieChart1.setHoleColor(Color.CYAN);//中間洞的顏色 pieChart1.setHoleRadius(20f);//設置圓環中間洞的半徑 // 設置圓環透明度及半徑 pieChart1.setTransparentCircleColor(Color.YELLOW); pieChart1.setTransparentCircleAlpha(110); pieChart1.setTransparentCircleRadius(40); pieChart1.setRotationEnabled(true);//設置圓盤是否轉動,默認轉動 pieChart1.setRotationAngle(0);//轉動角度 pieChart1.setRotationEnabled(true);//觸摸旋轉 pieChart1.setRotationAngle(20);//旋轉角度 Description description = new Description(); description.setText("餅圖測試!");//右下角顯示名稱 pieChart1.setDescription(description); //比例圖 Legend legend = pieChart1.getLegend(); legend.setPosition(Legend.LegendPosition.BELOW_CHART_RIGHT);//位置 legend.setForm(Legend.LegendForm.CIRCLE);//形狀 //設置X軸動畫 pieChart1.animateX(1500); setData(5); } /** * 餅圖數據 * * @param count */ private void setData(int count) { //每塊文字 ArrayList<String> names = new ArrayList<>(); for (int i = 0; i < 4; i++) { names.add(i + 1 + "小塊"); } //每塊名稱及百分比 ArrayList<PieEntry> values = new ArrayList<>(); values.add(new PieEntry(15, names.get(0))); values.add(new PieEntry(35, names.get(1))); values.add(new PieEntry(40, names.get(2))); values.add(new PieEntry(10, names.get(3))); //顯示在比例圖上 PieDataSet dataSet = new PieDataSet(values, "顏色指示"); //設置各餅狀圖之間的距離 dataSet.setSliceSpace(3f); // 部分區域被選中時多出的長度 dataSet.setSelectionShift(5f); // 設置餅圖各個區域顏色 ArrayList<Integer> colors = new ArrayList<Integer>(); colors.add(Color.RED); colors.add(Color.GREEN); colors.add(Color.BLUE); colors.add(Color.CYAN); dataSet.setColors(colors); PieData data = new PieData(dataSet); //設置以百分比顯示 data.setValueFormatter(new PercentFormatter()); //區域文字的大小 data.setValueTextSize(16f); //設置區域文字的顏色 data.setValueTextColor(Color.BLACK); //設置區域文字的字體 data.setValueTypeface(Typeface.DEFAULT); pieChart1.setData(data); //設置是否顯示區域文字內容 // pieChart1.setDrawSliceText(pieChart1.isDrawCenterTextEnabled()); //設置是否顯示區域百分比的值 // for (IDataSet<?> set : pieChart1.getData().getDataSets()) { // set.setDrawValues(!set.isDrawValuesEnabled()); // } // undo all highlights pieChart1.highlightValues(null); pieChart1.invalidate(); } private void setBarChart() { //設置X軸數據 ArrayList<Float> xValues = new ArrayList<>(); for (int i = 0; i < 6; i++) { xValues.add((float) i); } //設置Y軸數據 List<List<Float>> yValues = new ArrayList<>(); for (int i = 0; i < 3; i++) { List<Float> yValue = new ArrayList<>(); //一條柱狀圖模擬數據 for (int j = 0; j < 6; j++) { yValue.add((float) (Math.random() * 80)); } yValues.add(yValue); } //顏色集合 List<Integer> colors = new ArrayList<>(); colors.add(Color.RED); colors.add(Color.GREEN); colors.add(Color.CYAN); //線的名字集合 List<String> names = new ArrayList<>(); names.add("柱狀圖"); names.add("柱狀圖2"); names.add("柱狀圖3"); //X軸顯示字符串------->> final List<String> mList = new ArrayList<>(); for (int i = 0; i < 6; i++) { mList.add(i + 1 + "月"); } XAxis xAxis = barChart1.getXAxis(); xAxis.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { return mList.get((int) value); //mList爲存有月份的集合 } }); //X軸顯示字符串-------<< //顯示單條柱狀圖 barChartManager1.showBarChart(xValues, yValues.get(0), names.get(0), colors.get(0)); barChartManager1.setDescription("柱狀溫度圖"); barChartManager1.setYAxis(100, 0, 11); //顯示柱狀組圖 barChartManager2.showBarChart(xValues, yValues, names, colors); barChartManager2.setDescription("柱狀組溫度圖"); barChartManager2.setYAxis(100, 0, 11); barChartManager2.setXAxis(6f, 0f, 6); //橫向柱狀圖 barChartManager3.showHorizontalBarChart(xValues, yValues.get(0), "橫向柱狀圖", colors.get(0)); barChartManager3.setXAxis(6f, 0f, 6); barChartManager3.setYAxis(100f, 0f, 11); barChartManager3.setDescription("溫度"); } private void initView() { lineChart1 = findViewById(R.id.line_chart); lineChartManager1 = new LineChartManager(lineChart1); lineChart2 = findViewById(R.id.line_chart2); lineChartManager2 = new LineChartManager(lineChart2); barChart1 = findViewById(R.id.bar_chart1); barChartManager1 = new BarChartManager(barChart1); barChart2 = findViewById(R.id.bar_chart2); barChartManager2 = new BarChartManager(barChart2); horizontalBarChart = findViewById(R.id.horizontal_bar_chart); barChartManager3 = new BarChartManager(horizontalBarChart); pieChart1 = findViewById(R.id.pie_chart1); } private void setLineChartData() { //設置X軸數據 ArrayList<Float> xValues = new ArrayList<>(); for (int i = 0; i < 12; i++) { xValues.add((float) i); } //設置Y軸數據 List<List<Float>> yValues = new ArrayList<>(); for (int i = 0; i < 4; i++) { List<Float> yValue = new ArrayList<>(); //一條曲線模擬數據 for (int j = 0; j < 12; j++) { yValue.add((float) (Math.random() * 80)); } yValues.add(yValue); } //顏色集合 List<Integer> colors = new ArrayList<>(); colors.add(Color.BLUE); colors.add(Color.RED); colors.add(Color.GREEN); colors.add(Color.CYAN); //線的名字集合 List<String> names = new ArrayList<>(); names.add("一條溫度曲線圖"); names.add("溫度曲線圖2"); names.add("溫度曲線圖3"); names.add("溫度曲線圖4"); //設置數據並顯示一條曲線 lineChartManager1.showLineChart(xValues, yValues.get(0), names.get(0), colors.get(0)); lineChartManager1.setDescription("溫度"); //Y軸0-100 分10格 lineChartManager1.setYAxis(100, 0, 11); //警戒線80 紅色 lineChartManager1.setHightLimitLine(80, "高溫報警", Color.RED); lineChart1.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry e, Highlight h) { // Log.e(TAG, "----e:" + e.toString()); } @Override public void onNothingSelected() { } }); //顯示多條曲線 // lineChart2.setBackgroundColor(Color.GRAY);//表格背景 lineChartManager2.showLineChart(xValues, yValues, names, colors); lineChartManager2.setYAxis(100, 0, 11); lineChartManager2.setDescription("多條溫度曲線圖"); } }
3.xml佈局:
<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="com.example.mpchart.MainActivity"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="lineChart1:曲線圖帶限制線..." /> <com.github.mikephil.charting.charts.LineChart android:id="@+id/line_chart" android:layout_width="match_parent" android:layout_height="300dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="lineChart2:多條曲線圖...." /> <com.github.mikephil.charting.charts.LineChart android:id="@+id/line_chart2" android:layout_width="match_parent" android:layout_height="300dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="單條柱狀圖...." /> <com.github.mikephil.charting.charts.BarChart android:id="@+id/bar_chart1" android:layout_width="match_parent" android:layout_height="300dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="橫向柱狀圖...." /> <com.github.mikephil.charting.charts.HorizontalBarChart android:id="@+id/horizontal_bar_chart" android:layout_width="match_parent" android:layout_height="300dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="柱狀組圖...." /> <com.github.mikephil.charting.charts.BarChart android:id="@+id/bar_chart2" android:layout_width="match_parent" android:layout_height="300dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="餅狀圖..." /> <com.github.mikephil.charting.charts.PieChart android:id="@+id/pie_chart1" android:layout_width="match_parent" android:layout_height="300dp" /> </LinearLayout> </ScrollView> </LinearLayout>有問題可以聯繫我或網上找答案。