MPAndroidChart是GitHub上的一個開源框架,主要用於快速實現Android端的圖表問題,包括線性圖、柱狀圖、餅狀圖等等;
MPAndroidChart的引入只需要在Android Studio 的gradle文件裏面添加下面代碼即可:
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile 'com.github.PhilJay:MPAndroidChart:v2.2.3'
}
(一)MPAndroidChart —— 餅狀圖:
在layout裏面添加餅狀圖控件:
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/mpchart_piechart"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_gravity="center"
/>
在java中的代碼:
package com.zerom.mtest;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.DisplayMetrics;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import java.util.ArrayList;
import butterknife.Bind;
import butterknife.ButterKnife;
public class MpChart extends Activity {
@Bind(R.id.mpchart_piechart)
PieChart mPieChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mpchart);
ButterKnife.bind(this);
PieData mPieData = getPieData();
mChart(mPieChart, mPieData);
}
private void mChart(PieChart pieChart, PieData pieData) {
// pieChart.setHoleColor(Color.parseColor("#000000")); //設置中間圓盤顏色
// pieChart.setDescriptionTextSize(22); //右下角說明文字大小
pieChart.setHoleColor(Color.TRANSPARENT);
pieChart.setHoleRadius(60f); //半徑
pieChart.setTransparentCircleRadius(64f); // 半透明圈
//pieChart.setHoleRadius(0) //實心圓
//pieChart.setDescription("試衣率餅狀圖"); //底部右下角文字
// mChart.setDrawYValues(true);
pieChart.setDrawCenterText(true); //餅狀圖中間可以添加文字
pieChart.setCenterTextSize(15); //餅狀圖中間文字
pieChart.setDrawHoleEnabled(true);
pieChart.setRotationAngle(90); // 初始旋轉角度
pieChart.setRotationEnabled(true); // 可以手動旋轉
pieChart.setUsePercentValues(true); //顯示成百分比
pieChart.setCenterText("各類顏色試衣率"); //餅狀圖中間的文字
//設置數據
pieChart.setData(pieData);
Legend mLegend = pieChart.getLegend(); //設置比例圖
mLegend.setPosition(Legend.LegendPosition.RIGHT_OF_CHART); //最右邊顯示
// mLegend.setForm(LegendForm.LINE); //設置比例圖的形狀,默認是方形
mLegend.setXEntrySpace(7f);
mLegend.setYEntrySpace(5f);
pieChart.animateXY(1000, 1000); //設置動畫
}
private PieData getPieData() {
String str[] = {"灰色", "淺藍", "粉紅", "藍色", "紅色", "黑色"};
ArrayList<String> xData = new ArrayList<String>(); //xData用來表示每個餅塊上的內容
for (int i = 0; i < str.length; i++) {
xData.add(str[i]);
}
ArrayList<Entry> yData = new ArrayList<Entry>(); //yData用來表示封裝每個餅塊的實際數據
/**
* 將一個餅形圖分成六部分, 六部分的數值比例爲9:6:34:38:6:7
*/
float mdata[] = {9,6,34,38,6,7};
for (int i = 0; i < mdata.length; i++) {
yData.add(new Entry(mdata[i],i));
}
//y軸的集合
PieDataSet pieDataSet = new PieDataSet(yData, "" /*"各類顏色試衣率 2016"顯示在比例圖上*/);
pieDataSet.setSliceSpace(0f); //設置個餅狀圖之間的距離
ArrayList<Integer> colors = new ArrayList<Integer>();
int mColor[] = {Color.rgb(205, 205, 205),Color.rgb(114, 188, 223),Color.rgb(255, 123, 124),Color.rgb(57, 135, 200),
Color.parseColor("#F00000"),Color.parseColor("#000000")};
// 餅圖顏色
for (int i = 0; i < mColor.length ; i++) {
colors.add(mColor[i]);
}
pieDataSet.setColors(colors);
//餅圖中間的文字字體顏色以及大小
pieDataSet.setValueTextColor(Color.parseColor("#FFFFFF"));
pieDataSet.setValueTextSize(10);
DisplayMetrics metrics = getResources().getDisplayMetrics();
float px = 5 * (metrics.densityDpi / 160f);
pieDataSet.setSelectionShift(px); // 選中態多出的長度
PieData pieData = new PieData(xData, pieDataSet);
return pieData;
}
}
效果圖如下: