MPAndroidChart饼状图统计使用
2019-08-17 本文已影响0人
程序猿的小生活
1.app目录下中添加依赖
在Project即工程下的build.gradle文件里添加
maven { url "https://jitpack.io" }
添加下来是这个样子的:
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
google()
}
}
然后在项目下的build.gradle文件里添加
dependencies {
implementation 'com.github.PhilJay:MPAndroidChart:v2.2.5'//可能有新版本,当前使用的是v2.2.5
}
2.在layout布局文件中进行控件的布局
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/huifuchart"
android:layout_width="match_parent"
android:layout_height="350dp" />//高度设置注意下:不要写成wrap_content 亲测这样写不会显示饼状图
``
3.设置图表数据
```java
private void setPieChartData(PieChart pieChart,List<yueduqingkuangben> datas) {
/* Set set = pieValues.entrySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
entries.add(new PieEntry(Float.valueOf(entry.getValue().toString()), entry.getKey().toString()));
}*/
ArrayList<String> xValues = new ArrayList<String>(); // xVals用来表示每个饼块上的内容
ArrayList<Entry> yValues = new ArrayList<Entry>(); // yVals用来表示封装每个饼块的实际数据
ArrayList<Integer> colors = new ArrayList<Integer>();
int size = datas.size();
yueduqingkuangben data;
float quarterly;
for (int i = 0; i < size; i++) {
data = datas.get(i);
xValues.add(data.name);
quarterly = Integer.parseInt(data.value);
yValues.add(new Entry(quarterly, i));
colors.add(Color.parseColor(data.color));
}
PieDataSet dataSet = new PieDataSet( yValues, "");
dataSet.setSliceSpace(5f);//设置饼块之间的间隔
dataSet.setSelectionShift(5f);//设置饼块选中时偏离饼图中心的距离
dataSet.setColors(PIE_COLORS);//设置饼块的颜色
//设置数据显示方式有见图
dataSet.setValueLinePart1OffsetPercentage(80f);//数据连接线距图形片内部边界的距离,为百分数
dataSet.setValueLinePart1Length(0.3f);
dataSet.setValueLinePart2Length(0.4f);
dataSet.setValueLineColor(Color.YELLOW);//设置连接线的颜色
dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
PieData pieData = new PieData(xValues,dataSet);
pieData.setValueFormatter(new MyValueFormatter("次"));//是否显示百分号
// pieData.setValueFormatter(new DefaultValueFormatter(1,"次"));//自己修改的方法
// pieData.setValueFormatter(new PercentFormatter());
pieData.setValueTextSize(11f);
pieData.setValueTextColor(Color.DKGRAY);
pieChart.setData(pieData);
pieChart.highlightValues(null);
pieChart.setDescription(null);
pieChart.invalidate();
}
4.设置图表参数
public void setPieChart(PieChart pieChart, List<yueduqingkuangben> datas, String title, boolean showLegend) {
pieChart.setUsePercentValues(false);//设置使用百分比(后续有详细介绍)
// pieChart.getDescription().setEnabled(false);//设置描述
pieChart.setExtraOffsets(15, 10, 15, 10); //设置边距
pieChart.setDragDecelerationFrictionCoef(0.95f);//设置摩擦系数(值越小摩擦系数越大)
pieChart.setCenterText(title);//设置环中的文字
pieChart.setRotationEnabled(true);//是否可以旋转
pieChart.setHighlightPerTapEnabled(true);//点击是否放大
pieChart.setCenterTextSize(22f);//设置环中文字的大小
pieChart.setDrawCenterText(true);//设置绘制环中文字
pieChart.setRotationAngle(120f);//设置旋转角度
pieChart.setTransparentCircleRadius(61f);//设置半透明圆环的半径,看着就有一种立体的感觉
//这个方法为true就是环形图,为false就是饼图
pieChart.setDrawHoleEnabled(true);
//设置环形中间空白颜色是白色
pieChart.setHoleColor(Color.WHITE);
//设置半透明圆环的颜色
pieChart.setTransparentCircleColor(Color.WHITE);
//设置半透明圆环的透明度
pieChart.setTransparentCircleAlpha(110);
//图例设置
Legend legend = pieChart.getLegend();
if (showLegend) {
legend.setEnabled(true);//是否显示图例
legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);//图例相对于图表横向的位置
legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);//图例相对于图表纵向的位置
legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);//图例显示的方向
legend.setDrawInside(false);
legend.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT);
} else {
legend.setEnabled(false);
}
//设置饼图数据
setPieChartData(pieChart, datas);
pieChart.animateX(1500, Easing.EasingOption.EaseInOutQuad);//数据显示动画
}
5.方法调用
ArrayList<yueduqingkuangben> yueduchartlist = new ArrayList<yueduqingkuangben>();
yueduqingkuangben yue = new yueduqingkuangben();
int ceshishuju = 2;
yue.code = "xx";
yue.name = "测试";
yue.value = String.valueOf(ceshishuju);
yue.color = "#FF3B95DA";
if (ceshishuju != 0) {
yueduchartlist.add(yue5);
}
/* PieData mPieDataHp2 = getPieData(yueduchartlist);
showChart(huifuchart, mPieDataHp2, "未读");*/
setPieChart(huifuchart, yueduchartlist, "", false);
附加:(1)yueduqingkuangben
public class yueduqingkuangben {
public String code; // 0未阅 1已阅
public String name; //名字
public String value; //数量
public String color;
}
(2)原生的MPAndroidChart数据是带%,如果不需要%可以自定义一个类实现ValueFormatter 接口 例如:
public class MyValueFormatter implements ValueFormatter {
private DecimalFormat mFormat;
public MyValueFormatter(String myUnit){
setValueFormatter(myUnit);
}
public void setValueFormatter(String myUnit) {
mFormat = new DecimalFormat("###,###,###,##" + myUnit);
}
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
return mFormat.format(value);
}
}
并在方法中设置
pieData.setValueFormatter(new MyValueFormatter("次"));//是否显示百分号 注意setValueFormatter这个只能设置一次,设置多了可能导致此方法被覆盖
(3)效果图:
IMG_20190817_100404.jpg