【kotlin】使用MPAndroidChart实现PieChart(饼图)并设置每个数据的颜色、标签等属性

news2024/11/20 12:18:57

概述

MPAndroidChart 是 Android 上一个非常流行的开源图表库,它提供了多种类型的图表,包括折线图、柱状图、饼图等。

MPAndroidChart 实现饼图

下面是一个使用 MPAndroidChart 实现饼图的示例代码:

首先,需要在项目的 build.gradle 文件中添加 MPAndroidChart 的依赖:

implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'

然后,在布局文件中添加一个 PieChart 控件:

<com.github.mikephil.charting.charts.PieChart
    android:id="@+id/pieChart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

在代码中,可以先获取 PieChart 控件的实例,并设置一些基本的属性,例如是否显示图例、是否启用旋转等:

val pieChart = findViewById<PieChart>(R.id.pieChart)

// 不显示图例
pieChart.legend.isEnabled = false

// 启用旋转
pieChart.isRotationEnabled = true

然后,需要创建一个 PieDataSet 对象来存储饼图的数据,并设置每个数据的颜色、标签等属性:

val entries = listOf(
    PieEntry(20f, "A"),
    PieEntry(30f, "B"),
    PieEntry(50f, "C")
)

val dataSet = PieDataSet(entries, "Pie Chart")
dataSet.colors = listOf(Color.RED, Color.GREEN, Color.BLUE)
dataSet.valueTextColor = Color.BLACK

在上面的代码中,我们首先创建了一个包含三个数据的 List,每个数据包含一个数值和一个标签。然后,我们创建了一个 PieDataSet 对象,将 List 中的数据添加到其中,并设置了数据的颜色、标签颜色等属性。

最后,将 PieDataSet 对象添加到 PieData 中,并将 PieData 设置给 PieChart 控件即可:

val data = PieData(dataSet)
pieChart.data = data
pieChart.invalidate()

在上面的代码中,我们首先将 PieDataSet 对象添加到 PieData 中,然后将 PieData 设置给 PieChart 控件,并调用了 invalidate() 方法来刷新图表。

完整的饼图实现代码如下:

val pieChart = findViewById<PieChart>(R.id.pieChart)

// 不显示图例
pieChart.legend.isEnabled = false

// 启用旋转
pieChart.isRotationEnabled = true

val entries = listOf(
    PieEntry(20f, "A"),
    PieEntry(30f, "B"),
    PieEntry(50f, "C")
)

val dataSet = PieDataSet(entries, "Pie Chart")
dataSet.colors = listOf(Color.RED, Color.GREEN, Color.BLUE)
dataSet.valueTextColor = Color.BLACK

val data = PieData(dataSet)
pieChart.data = data
pieChart.invalidate()

在运行代码后,将会显示一个包含三个扇形的饼图,每个扇形的颜色、标签和大小都根据数据自动计算。可以通过修改数据集中的数据、颜色等属性来改变图表的外观。


设置饼图的点击事件来显示饼图的详细信息

在 MPAndroidChart 中,可以通过设置饼图的点击事件来显示饼图的详细信息。具体的实现步骤如下:

首先,需要为饼图设置一个点击事件监听器,可以使用 setOnChartValueSelectedListener() 方法来设置:

val pieChart = findViewById<PieChart>(R.id.pieChart)

pieChart.setOnChartValueSelectedListener(object : OnChartValueSelectedListener {
    override fun onValueSelected(e: Entry?, h: Highlight?) {
        // 点击饼图时的逻辑处理
    }

    override fun onNothingSelected() {
        // 未选中任何点时的逻辑处理
    }
})

在上面的代码中,我们首先获取了一个名为 pieChartPieChart 控件的实例,然后为其设置了一个点击事件监听器,其中 onValueSelected() 方法会在用户点击饼图时被调用,onNothingSelected() 方法会在用户未选中任何点时被调用。

接下来,在 onValueSelected() 方法中,我们可以获取当前选中的饼图数据对象 PieEntry,并根据其属性来显示详细信息。例如,可以通过 PieEntryvalue 属性来显示当前选中饼图的数值,通过 PieEntrylabel 属性来显示当前选中饼图的标签,例如:

override fun onValueSelected(e: Entry?, h: Highlight?) {
    if (e is PieEntry) {
        val value = e.value // 获取当前选中饼图的数值
        val label = e.label // 获取当前选中饼图的标签
        Toast.makeText(this, "$label: $value", Toast.LENGTH_SHORT).show() // 显示详细信息
    }
}

在上面的代码中,我们首先判断当前选中的数据对象是否为 PieEntry,然后通过 PieEntryvaluelabel 属性来获取当前选中饼图的数值和标签,并使用 Toast 来显示详细信息。

最后,别忘了在 onNothingSelected() 方法中清除显示的详细信息:

override fun onNothingSelected() {
    Toast.makeText(this, "", Toast.LENGTH_SHORT).show() // 清除详细信息
}

完整的代码示例:

val pieChart = findViewById<PieChart>(R.id.pieChart)

pieChart.setOnChartValueSelectedListener(object : OnChartValueSelectedListener {
    override fun onValueSelected(e: Entry?, h: Highlight?) {
        if (e is PieEntry) {
            val value = e.value // 获取当前选中饼图的数值
            val label = e.label // 获取当前选中饼图的标签
            Toast.makeText(this@MainActivity, "$label: $value", Toast.LENGTH_SHORT).show() // 显示详细信息
        }
    }

    override fun onNothingSelected() {
        Toast.makeText(this@MainActivity, "", Toast.LENGTH_SHORT).show() // 清除详细信息
    }
})

运行代码后,当用户点击饼图时,将会在屏幕上显示当前选中饼图的详细信息。可以根据具体的需求来修改详细信息的显示方式和内容。


实现3D带阴影渐变效果

在 MPAndroidChart 中,可以通过设置 PieChart 控件的 setDrawHoleEnabled() 方法来控制是否绘制饼图中心的空洞,使用 setTransparentCircleRadius() 方法来设置空洞的半径大小,使用 setHoleColor() 方法来设置空洞的颜色。可以通过设置这些属性来实现带影音渐变效果的 3D 饼图。下面是一个示例代码:

val pieChart = findViewById<PieChart>(R.id.pieChart)
pieChart.setUsePercentValues(true) // 设置使用百分比
pieChart.description.isEnabled = false // 隐藏图表描述
pieChart.setDrawEntryLabels(false) // 隐藏饼图标签
pieChart.setDrawCenterText(false) // 隐藏中心文字

设置饼图中心的空洞

pieChart.setDrawHoleEnabled(true) // 绘制空洞
pieChart.setTransparentCircleRadius(0f) // 空洞半径为 0(不绘制透明圆)
pieChart.setHoleRadius(40f) // 空洞半径为 40dp
pieChart.setHoleColor(Color.parseColor("#1E1E1E")) // 空洞颜色为灰色

设置饼图的颜色

val colors = listOf(
    Color.parseColor("#FFD700"),
    Color.parseColor("#FF8C00"),
    Color.parseColor("#DC143C")
)
val dataSet = PieDataSet(entries, "")
dataSet.colors = colors

设置饼图的阴影和渐变

dataSet.setShadowColor(Color.DKGRAY) // 阴影颜色为黑色
dataSet.setShadowRadius(5f) // 阴影半径为 5dp
dataSet.setGradientColor(Color.parseColor("#333333"), Color.parseColor("#444444")) // 设置渐变色

设置其他属性

dataSet.valueTextSize = 14f // 设置数值文字大小
dataSet.valueTextColor = Color.WHITE // 设置数值文字颜色
dataSet.sliceSpace = 2f // 设置饼图间距

设置饼图数据

val data = PieData(dataSet)
data.setValueFormatter(PercentFormatter(pieChart)) // 设置百分比格式化器
data.setValueTextSize(14f) // 设置数值文字大小
data.setValueTextColor(Color.WHITE) // 设置数值文字颜色

设置图表动画

pieChart.animateY(1400, Easing.EaseInOutQuad)

设置图表数据

pieChart.data = data
pieChart.invalidate() // 刷新图表

在上面的代码中,我们首先获取了一个名为 pieChartPieChart 控件的实例,并设置了一些基本属性,例如使用百分比、隐藏图表描述、隐藏饼图标签、隐藏中心文字等。然后,我们设置了饼图中心的空洞属性,包括绘制空洞、空洞半径、空洞颜色等。接着,我们设置了饼图的颜色、阴影和渐变属性,其中渐变色为从深灰色到浅灰色的渐变。最后,我们设置了饼图的其他属性,例如数值文字大小、数值文字颜色、饼图间距等,以及设置了饼图数据和图表动画。

运行代码后,将会显示一个带影音渐变效果的 3D 饼图,其效果类似于下图:

在这里插入图片描述

如果想要实现类似下面这张图片的效果,可以使用 setDrawable() 方法来设置饼图的图片,例如:

在这里插入图片描述

val pieChart = findViewById<PieChart>(R.id.pieChart)
pieChart.setUsePercentValues(true) // 设置使用百分比
pieChart.description.isEnabled = false // 隐藏图表描述
pieChart.setDrawEntryLabels(false) // 隐藏饼图标签
pieChart.setDrawCenterText(false) // 隐藏中心文字

设置饼图中心的空洞

pieChart.setDrawHoleEnabled(true) // 绘制空洞
pieChart.setTransparentCircleRadius(0f) // 空洞半径为 0(不绘制透明圆)
pieChart.setHoleRadius(40f) // 空洞半径为 40dp
pieChart.setHoleColor(Color.TRANSPARENT) // 空洞颜色为透明

设置饼图的图片

val drawable = ContextCompat.getDrawable(this, R.drawable.pie_chart)
pieChart.setDrawable(drawable)

设置图表动画

pieChart.animateY(1400, Easing.EaseInOutQuad)

设置图表数据

pieChart.data = data
pieChart.invalidate() // 刷新图表

在上面的代码中,我们将饼图中心的空洞颜色设置为透明,然后使用 setDrawable() 方法来设置饼图的图片。

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

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

相关文章

Makerbase CANable V2.0 产品简介

一、产品介绍 MKS CANable V2.0模块为MKS CANable V1.0升级版本。CANable 2.0是一款小型低成本开源 USB转CAN分析仪。CANable枚举为您计算机上的虚拟串行端口&#xff0c;并充当 CAN总线接口的串行线路。使用candleLight固件时&#xff0c;CANable在Linux上枚举为本地CAN接口。…

MySQL中float、double以及decimal的用法

1、浮点型和定点型 1.1 浮点型&#xff1a; 浮点型能够表示更大的数据范围&#xff0c;但是容易发生精度的问题 float和double属于浮点型&#xff0c;其取值范围与java中的浮点类型的取值范围相同&#xff0c;float占用4字节&#xff0c;double占用8字节 1.2 定点型&#xf…

springboot校园疫情防控管理与数据可视化系统-计算机毕设 附源码84534

springboot校园疫情防控管理与数据可视化系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针…

实战之如何在VUE中播放RTSP实时推流播放解决方案

一、知识点 常见的直播协议有以下几种 RTMP&#xff08;Real-Time Messaging Protocol&#xff09;实时消息传输协议&#xff1a;是一种用于互联网应用中的协议&#xff0c;最初由 Adobe 公司设计&#xff0c;用于 Flash Player 向 Flash Media Server 或其他支持 RTMP 的服务…

三、Docker命令及基本使用

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、帮助启动类命令1.1 启动docker1.2 停止docker1.3 重启docker1.4 查看docker状态1.5 开机启动1.6 查看docker概要信息1.7 查看docker总体帮助文档1.8 查看docker命令…

模板文件导出Excel【EasyPoi实战系列】- 第478篇

​历史文章&#xff08;文章累计470&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 …

慎投!6月有3本SCIE期刊被剔除!(附SCI/SSCI目录下载)

期刊动态&#xff1a;2023年6月SCI、SSCI期刊目录更新 2023年6月20日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次5月WOS期刊目录剔除4本SCIE&SSCI期刊之后&#xff0c;此次6月更新又有3本SCIE期刊发生变动&#xff0c;其中有1本期刊被踢出SCIE数据库&#x…

Python基础(18)——Python推导式

Python基础&#xff08;18&#xff09;——Python推导式 文章目录 Python基础&#xff08;18&#xff09;——Python推导式目标一. 列表推导式1.1 快速体验1.2 带if的列表推导式1.3 多个for循环实现列表推导式 二. 字典推导式1 快速体验 三. 集合推导式四. 总结 目标 列表推导…

PowerShell系列(七)PowerShell当中的Provider介绍

往期回顾PowerShell系列&#xff08;一&#xff09;&#xff1a;PowerShell介绍和cmd命令行的区别 PowerShell系列&#xff08;二&#xff09;&#xff1a;PowerShell和Python之间的差异介绍 PowerShell系列&#xff08;三&#xff09;&#xff1a;PowerShell发展历程梳理 P…

管理类联考——写作——素材篇——论说文——写作素材05——志篇:奉献·公益06——制篇:原则·准则

管理类专业学位联考 (写作能力) 论说文素材 05——志篇&#xff1a;奉献公益 论文说材料: 自己活着&#xff0c;就是为了使别人过得更美好。 ——雷锋 一&#xff1a;道理论据 成人善事&#xff0c;其功更倍&#xff1b;动人善愿&#xff0c;其量无涯。——陈龙正 凡人为善…

谷歌tryOnDiffusion实现了高度逼真的虚拟试穿;ChatGPT 或将推出 AI 应用商店

&#x1f989; AI新闻 &#x1f680; ChatGPT Plus 用户已支持联网和插件功能&#xff0c;OpenAI 或将推出 AI 应用商店 摘要&#xff1a;OpenAI 宣布 ChatGPT Plus 用户已支持联网和插件功能。据外媒 The Information 报道&#xff0c;OpenAI 正考虑为 AI 软件创建一个应用商…

postgresql snapshot快照源码解析, 快照内容生成规则, 可见性是这样判断的

postgresql snapshot快照源码解读 ​专栏内容&#xff1a;postgresql内核源码分析 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 概述 本文主要介绍数据库事务快照&#xff0c;分别从源码实…

VisualSVN Server 5.1.5 Crack

特征 VisualSVN Server 提供以下主要功能。 Active Directory 单点登录 允许用户使用他们当前的 Active Directory 域凭据访问 VisualSVN Server。使用安全 Kerberos V5 或 NTLM 身份验证协议。支持双因素身份验证和智能卡。 多站点存储库复制 使用 VisualSVN 分布式文件系统…

【FPGA入门】第七篇、FPGA实现VGA接口驱动

目录 第一部分、实验结果 1、横的三色彩条效果 2、竖的三色彩条效果 第二部分、VGA驱动基本知识 1、VGA分辨率问题 2、VGA驱动波形 2.1、工业标准的时序波形图 2.2、比上面那张图更容易理解的图 2.3、每个区域对应的时间 2.4、不同分辨率的表格 3、VGA扫描范…

【NeRF大总结】基于NeRF的三维视觉年度进展报告

基于NeRF的三维视觉年度进展报告 清华大学&#xff1a;刘烨斌 原文链接&#xff1a;【NeRF大总结】基于NeRF的三维视觉年度进展报告–清华大学刘烨斌 (by 小样本视觉与智能) 目录 文章目录 基于NeRF的三维视觉年度进展报告01 背景介绍NeRFNeRF与三维视觉三维表征与可微渲染…

信号与系统与MATLAB应用(一)

文章目录 前言一、基本信号表示1、周期方波信号2、周期锯齿波信号3、指数函数信号4、抽样函数信号5、单位阶跃信号 二、信号的基本运算1、信号的相加和相乘2、信号的平移3、信号的反折4、信号的尺度变换&#xff08;缩展&#xff09;5、信号的微分和积分未完待续... 前言 说起…

WEBGIS系统整体设计

城市地下电力管线管理系统是一个基于B/S 架构的应用系统。系统的网络拓扑结构如 PostgreSQL 数据库以及文件系统作为数据服务器。另外&#xff0c;使用GeoServer 作为GIS 服务器&#xff0c;提供符合OpenGIS 规定的WFS 、WMS 等协议的GIS 服务。 遵循MVC 的分层设计思想&#x…

第三十四章 开发Productions - ObjectScript Productions - Defining Business Metrics

文章目录 第三十四章 开发Productions - ObjectScript Productions - Defining Business Metrics定义业务指标业务指标简介业务指标属性 单实例和多实例业务指标作为业务服务的业务指标 第三十四章 开发Productions - ObjectScript Productions - Defining Business Metrics 定…

Linux常用命令——ftpwho命令

在线Linux命令查询工具 ftpwho 显示当前每个ftp会话信息 补充说明 ftpwho命令ftp服务器套件proftpd的工作指令&#xff0c;用于显示当前每个ftp会话信息。 语法 ftpwho(选项)选项 -h&#xff1a;显示帮助信息&#xff1b; -v&#xff1a;详细模式&#xff0c;输出更多信…

SpringBoot使用Session防止表单重复提交(提供Gitee源码)

前言&#xff1a;在日常开发中&#xff0c;客户可能会存在反复点击提交按钮导致表单的重复提交&#xff0c;这个问题也是非常需要重视的&#xff0c;在本篇博客中&#xff0c;采用的是session、自定义注解和拦截器的方式来防止重复表单的重复提交&#xff0c;提高整体代码的优雅…