您的位置:首页 > 移动开发 > Android开发

MpAndroidChart源码修改之饼状图添加标志线

2017-09-12 15:03 1226 查看
由于项目需要,需要改MpandroidChart源码,下面,先看下效果图:



效果很简单,但是由于所选依赖库没提供相关方法,所以就需要重写源码了.

这条红色的标志线其实就是那个影厅的均值嘛,这条线看着是不是和图表中的连接线很像呢,那把连接线稍加改造不就可以了吗?下面,先看下此依赖库自带的连接线的效果图:



思考一下,我们只需要把值的颜色设置成透明就可以了,然后把连接线改造一下.

首先,先设置图表的连接线的属性.

pieData.setDrawValues(true);//饼状图上显示值
dataSet.setValueLinePart1Length(0.3f);//设置连接线的长度
//x,y值在圆外显示(在圆外才会有连接线)
dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
//数据连接线距图形片内部边界的距离,为百分数(0~100f)
dataSet.setValueLinePart1OffsetPercentage(0f);
//设置x,y在圆外显示的值为透明(transparent = 0x00000000)
pieData.setValueTextColor(transparent);


好了,现在就该修改源码了.

首先找到PieChart类,发现图表的绘制的代码都在PieChartRenderer类中.为了不影响其他图表,我们把PieChart和PieChartExtraRenderer复制一份,在复制的代码中做修改.

在PieChartExtraRenderer中找到drawValues( )这个方法,这个方法就是绘制显示值和连接线的方法.

可以很快找到,这条折线



我们把第二折线注释掉,就不会出现和连接线一样的折线效果了.

然后可以在这个方法的前几行找到得到的角度,



由于图表是自动获取角度的,那我们如果设置方法手动改变角度,不就可以了吗.所以在上图中,我把原有代码注释掉,改为我们获取的角度,在这个类中添加方法:



然后我们在设置图表的时候先设置这个指示线的角度



里边的值为0~360f,由于我们用的是连接线,连接线都是从所占区域的中间画的,所以我们需要乘以2.

运行时,会报错,是因为数组越界了.



再循环中,每次循环xIndex都会加1,由于我们的饼状图有两个数据,所以会循环两次,就会越界.所以上图我们强制xIndex为0.

由于循环两次,所以会画2个线,我们要第一条线,所以再加个参数time,把time放循环末尾time++,而在画线的方法外添加判断



这样效果就实现了.

提醒一点,触摸事件会因为为空报错,需要把触摸事件禁用.

pieChart.setRotationEnabled(false);//触摸旋转
pieChart.setTouchEnabled(false);


下边,给个修改好的饼状图的依赖库,使用PieChartExtra这个饼状图,同时要设置标志线角度,调用
PieChartExtraRenderer.setRotateLine(rotate)
方法

链接地址:

MpAndroidChart依赖库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android PieChart