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)方法

转载于:https://juejin.im/post/5a126e60f265da43333e0142

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据同步云端本地_如何从云端删除Windows 8的同步数据

数据同步云端本地The ability to sync data and settings between computers running Windows 8 is great, but it does mean that your information – possibly personal – is stored in the cloud. If you have changed your mind about syncing and want to remove your d…

前端roadmap

转载于:https://www.cnblogs.com/cleverle/p/9615061.html

mysql 8+ 忘记root密码 解决方案

在安装完数据库后,由于自己不小心直接关闭了安装窗口,或者长时间没有使用root用户登录系统,导致忘记了root密码,这时就需要重置MySQL的root密码。当然,最简单方式自然是删除数据库的data目录,然后重新安装数…

安全领域应该关注的网站

http://www.freebuf.com/ https://www.seceye.cn/ https://zhuanlan.zhihu.com/c_118578260 https://www.easyaq.com/samesource/360.shtml http://bobao.360.cn/index/index https://www.sec-wiki.com/event

国内是否可以安装alexa_Alexa可以听到您无法听到的命令,哪些黑客可以利用

国内是否可以安装alexaYour smart speaker can hear sounds that humans can’t, meaning attackers could hypothetically trigger a command without you noticing. It’s happening in labs right now. 您的智能扬声器可以听到人类听不到的声音,这意味着攻击者可…

为什么要使用React Hooks?(5分钟实例)

前言 React Hooks在React v16.8正式稳定版中加入。 Hooks是什么? React Hooks 就是让你不必写class组件就可以用state和其他的React特性;你也可以编写自己的hooks在不同的组件之间复用;最近很多人都在谈论 React Hooks。当使用React类组件那么久&#x…

ActiveMQ在windows下启动失败解决方案

activemq.xml文件中的<transportConnectors><!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --><transportConnector name"openwire" uri"tcp://0.0.0.0:61616?maximumConnections1000&amp;wireForma…

jest忽略如何添加忽略_大多数人忽略的基本家庭维护任务

jest忽略如何添加忽略Owning a home requires a lot of responsibility, most notably regular maintenance to keep everything working great. However, there are a handful of very basic home maintenance tasks that you might be forgetting about. 拥有房屋需要承担很多…

自定义常用input表单元素二:纯css实现自定义radio单选按钮

这是接着上一篇纯css自定义复选框checkbox的第二篇&#xff0c;自定义一个radio单选按钮&#xff0c;同样&#xff0c;采用css伪类和“”css选择器为思路&#xff0c;下面是预览图&#xff1a; 下面直入主题放代码&#xff1a;HTML部分 <!--两个name相同的radio--> <i…

Elasticsearch之kopf插件安装之后的浏览详解

比如&#xff0c;我的这里是http://192.168.80.200:9200/_plugin/kopf/ 1、cluster 2、nodes 3、rest 4、more 5、更多详情&#xff0c;随着深入&#xff0c;再贴写分享&#xff01; 本文转自大数据躺过的坑博客园博客&#xff0c;原文链接&#xff1a;http://www.cnblogs.com/…

邮件系统之webmail

courier-authlib 网址http://www.courier-mta.org/ flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里 虚拟用户&#xff1a;Maildir &#xff1a;/var/mailbox/Suexec apache ,httpdusergroupht…

如何将Microsoft Word文档转换为PDF

PDFs are handy for distributing documents so that they’re seen the same way by all parties. Typically, you’ll create documents using another app, and then convert them to PDF. Here’s how to do it for a Microsoft Word document. PDF易于分发文档&#xff0c…

ASP.NET WebApi 基于JWT实现Token签名认证

一、前言 开发提供数据的WebApi服务&#xff0c;最重要的是数据的安全性。那么对于我们来说&#xff0c;如何确保数据的安全将会是需要思考的问题。在ASP.NET WebService服务中可以通过SoapHead验证机制来实现&#xff0c;那么在ASP.NET WebApi中我们应该如何保证我们的接口安全…

Cage验证码生成器快速上手

Cage小巧&#xff0c;好用。这里在官方基础例子基础上做了扩展&#xff1a; 12345678910111213141516171819202122232425262728293031323334package com.lavasoft.ntv.web.common; import com.github.cage.IGenerator; import java.util.Random; /*** 验证码生成器 * * author …

马云:未来无工可打,人工智能发展红利还在10年以后

马云虽然已经退出阿里巴巴&#xff0c;但作为一代商业传奇他所说的话&#xff0c;还十分据有影响力。关于人工智能&#xff0c;马云提出过不少预测性言论。未来10年&#xff0c;房子、车子都不在值钱。面对人工智能时代&#xff0c;未来传统行业大部分会消失。更有厉害的&#…

如何更改您的iPhone铃声

The problem with having a popular phone like an iPhone is that, by default, everyone has the same ringtone. If you want to give your iPhone a more personal sound, here’s how to do it. 拥有像iPhone这样的流行手机的问题是&#xff0c;默认情况下&#xff0c;每个…

【ACM-ICPC 2018 沈阳赛区网络预赛 I】Lattice's basics in digital electronics

【链接】 我是链接,点我呀:) 【题意】 【题解】 每个单词的前缀都不同。 不能更明示了... 裸的字典树。 模拟一下。输出一下就ojbk了。 【代码】 #include <bits/stdc.h> #define LL long long #define rep1(i,a,b) for (int i a;i < b;i) #define rep2(i,a,b) for…

扒一扒那些年我们遇到的奇葩代码

前言 本文首发于公众号【一名打字员】 在工作中&#xff0c;我们通常会遇到传说中的“祖传”代码&#xff0c;有些是否让我们感到哭笑不得&#xff0c;今天本猿整理一下自己以及网络上出现过的奇葩代码。来源于互联网的均会标明出处。 TOP1 当仁不让的当然是传说中的“睡排序”…

相对湿度与绝对湿度_如何监视家里的湿度水平

相对湿度与绝对湿度High humidity is no fun, and neither is low humidity—you want a good balance between the two. Here’s how to monitor the humidity in your house so that you can make the proper adjustments. 高湿度无济于事&#xff0c;低湿度也无济于事-您希望…

基于redis实现的扣减库存

2019独角兽企业重金招聘Python工程师标准>>> 在日常开发中有很多地方都有类似扣减库存的操作&#xff0c;比如电商系统中的商品库存&#xff0c;抽奖系统中的奖品库存等。 解决方案 使用mysql数据库&#xff0c;使用一个字段来存储库存&#xff0c;每次扣减库存去更…