首先.给大家看看.我在项目中实现后的动态图
然后直奔主题吧
MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。MPAndroidChart同样拥有常用的图表类型:线型图、饼图、柱状图和散点图。
GitHub地址:
https://github.com/PhilJay/MPAndroidChart
下面主要实现以下饼状图:
1.有2种方法可以导库包
1.1 第一种是
compile 'com.github.PhilJay:MPAndroidChart:v2.2.5'
1.2 第二种是 直接导入JAR包
2.定义XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/mPieChart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"/>
</RelativeLayout>
3.把DEMO效果图贴出来
贴代码
MainActivity 代码
public class MainActivity extends Activity {
private PieChartUtils chartUtil;
private PieChart mChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mChart = (PieChart) findViewById(R.id.mPieChart);
chartUtil = new PieChartUtils(this);
PieData mPieData =chartUtil.getPieData(3, 100);
chartUtil.showChart(mChart, mPieData);
}
}
我抽取出来的 PieChartUtils
public class PieChartUtils {
private Context mContext;
private AssetManager assets;
private Typeface tf;
private Resources rs;
public PieChartUtils(Context context) {
this.mContext = context;
assets = mContext.getAssets();
rs = mContext.getResources();
}
void showChart(PieChart pieChart, PieData pieData) {
pieChart.setHoleColorTransparent(true);
pieChart.setHoleRadius(60f); //半径
pieChart.setTransparentCircleRadius(64f); // 半透明圈
// pieChart.setHoleRadius(0); //实心圆
pieChart.setDescription("测试饼状图");
pieChart.setDrawHoleEnabled(true);
// mChart.setDrawYValues(true);//设置是否显示y轴的值的数据
pieChart.setDrawCenterText(true); //饼状图中间可以添加文字
pieChart.setDrawHoleEnabled(true);
pieChart.setRotationAngle(90); // 初始旋转角度
// mChart.setDrawXValues(true);
pieChart.setRotationEnabled(true); // 可以手动旋转
pieChart.animateY(1000, Easing.EasingOption.EaseInOutQuad); //设置动画
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); //设置动画
}
/**
* @param count 分成几部分
* @param range 百分比
*/
PieData getPieData(int count, float range) {
ArrayList<String> xValues = new ArrayList<String>(); // xVals用来表示每个饼块上的内容
ArrayList<Entry> yValues = new ArrayList<Entry>(); // yVals用来表示封装每个饼块的实际数据
List<Integer> colors = new ArrayList<Integer>();// 每一块饼上的颜色
xValues.add(0, "第一块");
xValues.add(1, "第二块");
xValues.add(2, "第三块");
yValues.add(new Entry(5, 0));
yValues.add(new Entry(10, 1));
yValues.add(new Entry(15, 2));
colors.add(Color.rgb(205, 205, 205));
colors.add(Color.rgb(114, 188, 223));
colors.add(Color.rgb(255, 123, 124));
// colors.add(0xffff00ff);
// colors.add(0xff0000ff);
// colors.add(0xffffff00);
// y轴的集合
PieDataSet pieDataSet = new PieDataSet(yValues, " ");// 显示在比例图上
pieDataSet.setSliceSpace(0f); // 设置个饼状图之间的距离
pieDataSet.setSelectionShift(5f);
pieDataSet.setColors(colors);
DisplayMetrics metrics = rs.getDisplayMetrics();
float px = 2 * (metrics.densityDpi / 180f);
pieDataSet.setSelectionShift(px); // 选中态多出的长度
PieData pieData = new PieData(xValues, pieDataSet);
return pieData;
}
}
如果要去掉百分比的比例图
pieChart.setUsePercentValues(true); //显示成百分比
这是DEMO代码下载的地方:http://download.csdn.net/detail/yangbin0513/9713311