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

由于项目需要,需要改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依赖库

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值