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;
}
}
效果图如下: