MPChartLib-PieChart 饼图使用说明

前言

MPAndroidChart是一个强大的Android图表加载库。支持展示折线图、柱状图、饼图、雷达图、气泡图、K线图和图表的缩放、拖拽、动画功能。 本篇介绍MpCahrtLib中的一种图表控件-PieChart,饼图。

tip:最有效的理解与实现需求(定制)的方式是:查看源码。 PieChart

代码

简要说明

饼图的源代码主要是如下两个类:

  • PieChart
  • PieChartRenderer

PieChart - 图表整体结构

从如下代码就可窥见一二。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Override
protected void init() {
super.init();

mRenderer = new PieChartRenderer(this, mAnimator, mViewPortHandler);
mXAxis = null;

mHighlighter = new PieHighlighter(this);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

if (mData == null)
return;

mRenderer.drawData(canvas);

if (valuesToHighlight())
mRenderer.drawHighlighted(canvas, mIndicesToHighlight);

mRenderer.drawExtras(canvas);

mRenderer.drawValues(canvas);

mLegendRenderer.renderLegend(canvas);

drawDescription(canvas);

drawMarkers(canvas);
}

PieChartRenderer - 负责PieChart具体绘制。

主要有:drawData(),drawValues(),drawExtras(),drawHighlighted()

  • drawData() 饼图各大块的计算与绘制
  • drawHighlighted() 点按后的高亮模式绘制
  • drawExtras()内包含了 drawHole()内圈、drawCenterText()内圈内文字、c.drawBitmap()图
  • drawValues 饼图各大块上的文本

主要方法介绍

  • PieDataSet.setSliceSpace(); //设置饼图饼块间距,传入值的单位是dp,取值范围[0,20],默认是0dp
  • PieDataSet.setSelectionShift(); //设置饼图饼块选中效果时(highlighted),距离饼图中心距离,默认是12dp
  • PieChart.setDrawSliceText(false); //是否显示饼图上的X轴名称 新版本改成
  • PieChart.setDrawEntryLabels(false);//是否显示饼图上的X轴名称,setDrawSliceText已删除
  • PieData.setDrawValues(false); //隐藏饼图片上的Y轴数据(百分比数据)
  • PicChart.setOnChartValueSelectedListener();//饼块选中回调
  • PicChart.animateX(); //按X轴动画显示,个人感觉和animateY()、animateXY()差别不大
  • PicChart.animateY(); //
  • PicChart.animateXY(); //
  • PicChart.spin(); //设置旋转动画

  • PieChart.setUsePercentValues(true);//Y轴值是否显示百分比值,源码内如下处理

    1
    2
    float value = mChart.isUsePercentValuesEnabled() ? entry.getVal()
    / yValueSum * 100f : entry.getVal();
  • Piechart.setDescription(“”);//隐藏Desc 新版本改成 PieChart.getDescription().setEnabled(false);//隐藏/显示Desc,setDescription()已删除

  • PieChart.setExtraOffsets(5, 10, 5, 5);//图表距图表边距的距离,分别为:左,上,右,下,该值为dp单位。

  • PieChart.setDragDecelerationFrictionCoef(0.95f);//拖动时的减速摩擦系数,即手指离开后,饼图还能再旋转多久。该值范围[0,1),值越大,旋转越久。默认为0.9f。

  • PieChart.setCenterTextTypeface();//设置中心文本字体

  • PieChart.setCenterText();//设置中心文本

  • PieChart.setDrawHoleEnabled(true);//是否显示内圆

  • PieChart.setHoleColor(Color.WHITE);//设置内圆颜色

  • PieChart.setTransparentCircleColor(Color.WHITE);//设置贴着内圆外面的透明圆的颜色

  • PieChart.setTransparentCircleAlpha(110);//设置贴着内圆外面的透明圆的透明度,范围:[0,255],0:完全透明,255:完全不透明。默认为100

  • PieChart.setHoleRadius(58f);//设置内圆半径,该值为内圆半径与整个饼图的比例。默认为50f,即50% PieChart.setTransparentCircleRadius(61f);//the radius of the transparent circle next to the chart-hole in the center,翻译过来就是:贴着内圆外面的透明圆的半径,该值也是比例,默认为55f,即55%

  • PieChart.setDrawCenterText(true);//是否显示内圆文本

  • PieChart.setRotationAngle(0);//设置饼图起始饼块绘制的角度。默认270f(正北)

  • PieChart.setRotationEnabled(true);//是否可以手动旋转

  • PieChart.setHighlightPerTapEnabled(true);//饼块选中是否高亮

  • PicChart.saveToGallery(); //保存到gallery(图库)

  • PicChart.saveToPath(); // 保存到指定路径

设置label样式

  • PicChart.setEntryLabelColor(Color.WHITE);
  • PicChart.setEntryLabelTypeface();
  • PicChart.setEntryLabelTextSize(12f);

设置legend(图例)样式

  • Legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
  • Legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
  • Legend.setOrientation(Legend.LegendOrientation.VERTICAL);
  • Legend.setForm();//设置图例形状,有3种:SQUARE, CIRCLE, LINE。即:方,圆,线。默认为SQUARE。
  • Legend.setXEntrySpace(7f);//图例条目间距,setOrientation(Legend.LegendOrientation.HORIZONTAL)有效
  • Legend.setYEntrySpace(0f);//图例条目间距,setOrientation(Legend.LegendOrientation.VERTICAL)有效
  • Legend.setYOffset(0f);//设置Y轴边距,在已有ExtraOffsets等边距的基础上再加该边距。
坚持原创技术分享,您的支持是对我最大的鼓励!