Android 实现柱形图

在 Android 中实现柱状图,可以使用流行的图表库 MPAndroidChart,它支持多种类型的图表,包括柱状图、折线图、饼图等。下面是一个基本的柱状图实现步骤,具体分为以下几个部分:

1. 添加依赖

首先,你需要在 build.gradle 文件中添加 MPAndroidChart 库的依赖。 

dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' 
}

如果上述导入后发现在External Libraries下没有找到Chart的文件,则在settings.gradle里去添加这个

2. 创建布局文件(XML)

在你的布局文件activity_main.xml中添加一个 BarChart 控件,它是 MPAndroidChart 提供的用于显示柱状图的控件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><!--柱状图--><com.github.mikephil.charting.charts.BarChartandroid:id="@+id/barChart"android:layout_width="match_parent"android:layout_height="300dp" /></LinearLayout>

3. 配置柱状图数据

在你的 ActivityFragment 中,使用 MPAndroidChart 来设置柱状图的数据。

package com.example.kotlinlearnimport android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.github.mikephil.charting.charts.BarChart
import com.github.mikephil.charting.data.BarData
import com.github.mikephil.charting.data.BarDataSet
import com.github.mikephil.charting.data.BarEntry
import com.github.mikephil.charting.formatter.IndexAxisValueFormatterclass MainActivity : AppCompatActivity() {private lateinit var barChart: BarChartoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 初始化图表barChart = findViewById(R.id.barChart)// 准备数据val entries = arrayListOf(BarEntry(0f, 10f),BarEntry(1f, 20f),BarEntry(2f, 30f))// 创建数据集val barDataSet = BarDataSet(entries, "成绩")// 可选:设置柱状图的颜色barDataSet.color = getColor(R.color.purple_200)  // 用 getColor 替代 resources.getColor// 创建 BarDataval barData = BarData(barDataSet)barData.barWidth = 0.9f  // 设置柱状图的宽度// 设置数据到图表barChart.data = barData// 设置一些样式barChart.description.isEnabled = false  // 禁用描述文本barChart.setFitBars(true)  // 让柱状图适应宽度barChart.animateY(1000)  // 设置动画效果// 设置 X 轴标签val xLabels = arrayOf("Math", "English", "Science")barChart.xAxis.valueFormatter = IndexAxisValueFormatter(xLabels)barChart.xAxis.granularity = 1f  // 确保每个条目都有标签barChart.xAxis.isGranularityEnabled = true  // 启用粒度// 刷新图表barChart.invalidate()}
}

展示之后的样式如下:

这段代码是一个使用 MPAndroidChart 库实现柱状图显示的简单 Android 示例。它展示了如何在 MainActivity 中创建一个柱状图,并设置一些基本属性和数据。下面逐行解释代码的含义:

1. package com.example.kotlinlearn

  • 这是声明当前类所在的包名。包名用来组织项目中的类,避免类名冲突。

2. 导入所需的库

  • MPAndroidChart 库中的类:
    • BarChart: 用于显示柱状图的控件。
    • BarData: 用于处理并展示柱状图的数据。
    • BarDataSet: 一个数据集,它包含了要在柱状图中显示的所有数据。
    • BarEntry: 存储每个柱状图的数据(例如柱的高度和位置)。
    • IndexAxisValueFormatter: 用于设置 X 轴标签格式化的类。

3. MainActivity

  • private lateinit var barChart: BarChart:声明一个 BarChart 类型的变量 barChart,并使用 lateinit 来延迟初始化。lateinit 是 Kotlin 中的特性,允许你稍后初始化变量。

4. onCreate 方法

override fun onCreate(savedInstanceState: Bundle?) {                 super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)
}
  • onCreate() 是 Android 中 Activity 的生命周期方法之一,在活动被创建时调用。savedInstanceState 包含活动被重建时的状态(如果有)。
  • setContentView(R.layout.activity_main):设置当前 Activity 使用的布局文件为 activity_main.xml,在这个布局文件中包含了一个 BarChart 控件。

5. 初始化柱状图并设置数据

barChart = findViewById(R.id.barChart)
  • 通过 findViewById 查找布局中的 BarChart 控件,并将其赋值给 barChart 变量。

6. 准备柱状图的数据

val entries = arrayListOf( BarEntry(0f, 10f), BarEntry(1f, 20f), BarEntry(2f, 30f) 
)
  • entries 是一个 ArrayList,存储了柱状图的数据。
  • BarEntry(x, y):表示一个柱状图条目。第一个参数 x 是横坐标(通常表示分类),第二个参数 y 是纵坐标(表示柱的高度或数值)。
    • 第一根柱子的位置为 x=0,高度为 y=10
    • 第二根柱子的位置为 x=1,高度为 y=20
    • 第三根柱子的位置为 x=2,高度为 y=30

7. 创建数据集

val barDataSet = BarDataSet(entries, "成绩")
  • BarDataSet 是柱状图的数据集,它包含了多个 BarEntry,表示一组数据。
  • "成绩" 是该数据集的标签,显示在图表的图例中。

8. 设置数据集的颜色

barDataSet.color = getColor(R.color.purple_200)
  • barDataSet.color 设置柱状图的颜色。这里使用了 getColor(R.color.purple_200) 来获取颜色资源。

9. 创建 BarData 对象

val barData = BarData(barDataSet) barData.barWidth = 0.9f
  • BarData 包含了 BarDataSet 数据集,它实际上是数据和样式的集合,用来给柱状图控件设置数据。
  • barData.barWidth = 0.9f 设置每根柱子的宽度为 0.9f(占用图表总宽度的90%),避免柱子之间有太大的间隙。

10. 设置柱状图的样式

barChart.data = barData barChart.description.isEnabled = false 
barChart.setFitBars(true) barChart.animateY(1000)
  • barChart.data = barData:将准备好的 BarData 设置到 barChart 上,实际上就是给图表提供了数据。
  • barChart.description.isEnabled = false:禁用图表的描述文本,通常描述文本用于说明图表的标题,这里不需要。
  • barChart.setFitBars(true):让柱状图适应宽度,这样所有的柱子都会自动调整合适的宽度。
  • barChart.animateY(1000):给图表添加 Y 轴方向的动画效果,持续时间为 1000 毫秒。

11. 设置 X 轴标签

val xLabels = arrayOf("Math", "English", "Science") 
barChart.xAxis.valueFormatter = IndexAxisValueFormatter(xLabels) 
barChart.xAxis.granularity = 1f 
barChart.xAxis.isGranularityEnabled = true
  • xLabels 是一个包含 X 轴标签的数组,分别是 "Math", "English", "Science"
  • barChart.xAxis.valueFormatter = IndexAxisValueFormatter(xLabels):使用 IndexAxisValueFormatter 格式化 X 轴的标签,将它们设置为 xLabels 中定义的值。
  • barChart.xAxis.granularity = 1f:设置 X 轴的粒度,确保每个条目都能显示一个标签。
  • barChart.xAxis.isGranularityEnabled = true:启用粒度,使得 X 轴的标签能正常显示。

12. 刷新图表

barChart.invalidate()
  • invalidate() 方法会强制图表刷新,确保图表根据最新的数据重新绘制。

总结

这段代码的目的是在 MainActivity 中创建一个简单的柱状图,显示三科成绩的柱状数据,并自定义了一些图表的样式(如颜色、动画效果和 X 轴标签)。通过使用 MPAndroidChart 库,简化了柱状图的创建过程,使得数据的可视化更加直观。

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

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

相关文章

dolphin 配置data 从文件导入hive 实践(一)

datax 支持多种数据源的相互读写&#xff0c;作为开源软件&#xff0c;提供了离线采集功能&#xff0c;方便系统开发&#xff0c;过程中遇到诸多配置&#xff0c;需要开发者自己探索&#xff0c;免费同样有成本 配置模板 {"setting": {},"job": {"s…

AUTOSAR CP Ethernet State Manager(EthSM)规范的主要功能以及工作原理导读

AUTOSAR Ethernet State Manager&#xff08;以下简称EthSM&#xff09;规范的主要功能 AUTOSAR Ethernet State Manager&#xff08;以下简称EthSM&#xff09;规范的主要功能包括&#xff1a; 通信控制 网络模式管理&#xff1a;为通信管理器&#xff08;ComM&#xff09;提…

深度学习中的感受野:从基础概念到多层次特征提取

在深度学习&#xff0c;特别是计算机视觉任务中&#xff0c;感受野&#xff08;Receptive Field&#xff09;是一个至关重要的概念。它指的是在神经网络中某一层的神经元在输入图像上“看到”的区域大小。感受野的大小影响了网络能捕捉的特征层级&#xff0c;从而决定了它的特征…

VirtIO实现原理(1)

本文内容参考: VirtIO实现原理——PCI基础_virtio-pci-CSDN博客 QEMU源码全解析 —— virtio(3)_qemu virtio block bus-CSDN博客 特此致谢! 序言 本系列文章是笔者在看了网名为“享乐主”的VirtIO系列文章后决心要写的。这位博主的“VirtIO专栏”中博文的内容从技术层…

2024年双11激光投影仪哪个品牌最好?当贝新品震撼视觉的秘密武器

激光投影仪逐渐占据家庭娱乐生活的中心位置&#xff0c;以其超大屏优势与卓越的性能获得了众多消费者的青睐。双11购物狂欢节期间&#xff0c;正是入手一台高品质激光投影仪的好时机&#xff0c;各大厂商也纷纷推出了品牌新品&#xff0c;2024年双11激光投影仪怎么选&#xff1…

React的概念以及发展前景如何?

React是一个由Facebook开发的用于构建用户界面的的开源JavaScript库&#xff0c;它主要用于构建大型、动态的Web应用程序。React的主要特点是使用VirtualDOM&#xff08;虚拟DOM&#xff09;来优化性能&#xff0c;并使用声明式的编程方式来编写UI。 React的主要概念包括&#…

定位,堆叠,CSS精灵,过渡,光标(前端)

一.定位 1.作用 灵活改变盒子在网页中的位置 2.标签 position 3.属性值 &#xff08;1&#xff09;相对定位relative relative&#xff08;相对定位&#xff09;-----改变位置的参照物是原来的位置&#xff0c;挪动后原来的位置不托标&#xff0c;不被占用。 要配合top…

2024-11-01 - 统一身份认证 - OpenLdap - 中间件 - 流雨声

摘要 2024-11-01 周五 杭州 暴雨 调查问卷: https://www.wjx.cn/vm/exIBFDM.aspx# 2024年转瞬即逝&#xff0c;可是生活还在继续&#xff0c;这里有一项关于人工智能和项目管理对于效能关系的调研问卷&#xff0c;AI 对工作的作用和影响。问卷不采集个人信息&#xff0c;在此…

【363】基于springboot的高校竞赛管理系统

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大&#xff0c;容错率低&am…

qt QTextFrame详解

1. 概述 QTextFrame是Qt框架中用于表示文本框架的类。它允许在QTextDocument中创建和管理具有特定边界和格式的文本区域。QTextFrame可以包含文本、图像、表格或其他QTextFrame&#xff0c;从而提供丰富的文本布局和排版功能。QTextFrame通常与QTextCursor结合使用&#xff0c…

【JWT】Asp.Net Core中JWT刷新Token解决方案

Asp.Net Core中JWT刷新Token解决方案 前言方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。方案二:实现用户无感知的刷新token值,我们希望当响应返回的数据是401身份过期时,响应阻拦器自动帮我…

如何在Microsoft Edge中删除已保存的网站密码

目录 前言1. 如何进入Edge的密码管理界面1.1 打开Microsoft Edge的设置菜单1.2 进入个人资料设置1.3 进入密码管理 2. 在Edge中查看和删除已保存的密码2.1 查找需要删除的密码2.2 检查密码安全性2.3 删除特定网站的密码 3. 提升Edge密码管理的安全性3.1 启用Edge的多重身份验证…

[ Linux 命令基础 4 ] Linux 命令详解-文本处理命令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Linux 实验:日志的备份与恢复 xfs文件系统

添加一个新的硬盘&#xff0c;创建硬盘分区sdc1 设置文件系统格式xfs&#xff0c;提示安装xfsprogs&#xff0c;如果安装失败&#xff0c;在后缀加上--fix-missing直到安装完成为止 mkdir创建空目录data&#xff0c;将sdc1挂载到data&#xff0c;data是根目录下新建的目录&…

【C#】使用.net9在C#中向现有对象动态添加属性

在 C# 中向现有对象动态添加属性并不像在 Python 或 JavaScript 中那样容易&#xff0c;因为 C# 是一种强类型语言。 但是&#xff0c;我们可以通过使用一些技术和库来实现这一点&#xff0c;例如扩展方法、字典等。本文将详细介绍如何在 C# 中实现这一点。ExpandoObject 方法 …

Python学习从0到1 day26 第三阶段 Spark ⑤ 搜索引擎日志分析

目录 一、搜索引擎日志分析 二、需求1&#xff1a;热门搜索时间段(小时精度)Top3 实现步骤 三、需求2&#xff1a;打印输出:热门搜索词Top3 实现步骤 四、需求3&#xff1a;打印输出:统计hadoop关键字在哪个时段被搜索最多 实现步骤 五、需求4&#xff1a;将数据转换为JSON格式…

#渗透测试#SRC漏洞挖掘#深入挖掘CSRF漏洞01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

揭秘云计算 | 2、业务需求推动IT发展

揭秘云计算 | 1、云从哪里来&#xff1f;-CSDN博客https://blog.csdn.net/Ultipa/article/details/143430941?spm1001.2014.3001.5502 书接上文&#xff1a; 过去几十年间IT行业从大型主机过渡到客户端/服务器&#xff0c;再过渡到现如今的万物互联&#xff0c;IT可把控的资…

Grover算法——量子搜索算法

假设N个数据中符合条件的数据有M个&#xff0c;则量子搜索算法的复杂度为&#xff0c;远小于经典算法的复杂度。 黑箱 下面以N2为例&#xff0c;介绍黑箱如何标记符合条件的数据。N2意味着只有两个数据&#xff0c;可以用0和1来表示这两个数据&#xff0c;也就只需要一个量子比…

Ubuntu24.04网络异常与应对方案记录

PS: 参加过408改卷的ZJU ghsongzju.edu.cn 开启嘲讽: 你们知道408有多简单吗&#xff0c;操作系统真实水平自己知道就行&#xff5e;&#xff5e; Requested credits of master in UWSC30&#xff0c;in ZJU24&#xff0c;domestic master is too simple ubuntu安全软件 在 U…