MpAndroidChart源码修改之饼状图添加标志线
2017-09-12 15:03
1226 查看
由于项目需要,需要改MpandroidChart源码,下面,先看下效果图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/19/fe24c397f80f6fec8b7091216309b25e)
效果很简单,但是由于所选依赖库没提供相关方法,所以就需要重写源码了.
这条红色的标志线其实就是那个影厅的均值嘛,这条线看着是不是和图表中的连接线很像呢,那把连接线稍加改造不就可以了吗?下面,先看下此依赖库自带的连接线的效果图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/19/87967277be922c8a4b1c92ace409aa79)
思考一下,我们只需要把值的颜色设置成透明就可以了,然后把连接线改造一下.
首先,先设置图表的连接线的属性.
好了,现在就该修改源码了.
首先找到PieChart类,发现图表的绘制的代码都在PieChartRenderer类中.为了不影响其他图表,我们把PieChart和PieChartExtraRenderer复制一份,在复制的代码中做修改.
在PieChartExtraRenderer中找到drawValues( )这个方法,这个方法就是绘制显示值和连接线的方法.
可以很快找到,这条折线
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/19/50e37f52918612afacf8df987c258e90)
我们把第二折线注释掉,就不会出现和连接线一样的折线效果了.
然后可以在这个方法的前几行找到得到的角度,
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/19/5f42884c8e8f3334aee93935e8161079)
由于图表是自动获取角度的,那我们如果设置方法手动改变角度,不就可以了吗.所以在上图中,我把原有代码注释掉,改为我们获取的角度,在这个类中添加方法:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/19/3f9e45db578f1f9440f5306d8d9a935d)
然后我们在设置图表的时候先设置这个指示线的角度
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/19/ee278692aa11119822b8bbcadb53c9ca)
里边的值为0~360f,由于我们用的是连接线,连接线都是从所占区域的中间画的,所以我们需要乘以2.
运行时,会报错,是因为数组越界了.
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/19/1b425f10f76f088a15905e952cc53f0f)
再循环中,每次循环xIndex都会加1,由于我们的饼状图有两个数据,所以会循环两次,就会越界.所以上图我们强制xIndex为0.
由于循环两次,所以会画2个线,我们要第一条线,所以再加个参数time,把time放循环末尾time++,而在画线的方法外添加判断
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/19/3d52045b7c60849f228f1dfa976d5be6)
这样效果就实现了.
提醒一点,触摸事件会因为为空报错,需要把触摸事件禁用.
下边,给个修改好的饼状图的依赖库,使用PieChartExtra这个饼状图,同时要设置标志线角度,调用
链接地址:
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依赖库
相关文章推荐
- MPAndroidChart系列源码解读(一)
- MPAndroidChart之LineChart源码分析
- Android 给AChartEngine绘制的曲线图加渐变色(修改AChartEngine源码)
- MPAndroidChart系列源码解读(五)
- MPAndroidChart系列源码解读(二)
- Android MPAndroidChart使用教程和源码分析(五)
- Android MPAndroidChart使用教程和源码分析(二)
- MPAndroidChart系列源码解读(三)
- MPAndroidChart系列源码解读(四)
- MPAndroidChart 教程:修改视窗 Modifying the Viewport(九)
- MPAndroidChart之PieChart源码分析
- MPAndroidChart- 高级修改一
- MPAndroidChart- 高级修改二
- MPAndroidChart 教程:修改视窗 Modifying the Viewport(九)
- MpAndroid Chart Barchart Entry 获取的getX() 不准确
- Android对apk源码的修改--反编译+源码修改+重新打包+签名【附HelloWorld的修改实例】
- Android5.1.1-APK签名校验分析和修改源码绕过签名校验
- mpandroidchart 绘制K线图 难点解决-高亮 连线 与 表格对齐
- Android5.1.1 - APK签名校验分析和修改源码绕过签名校验
- Android MPAndroidChart--PieChart 常见问题