图表开源项目MPAndroidChart

时间:2020-12-21 13:19:01

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;
}

}

效果图如下:
图表开源项目MPAndroidChart