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.xdnf.cn/news/11226.html

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

相关文章

python基础

1.python的第一个程序 2.代码注释 3.交互模式 4.变量与常量 电影文件是有文件类型&#xff1a;MP4&#xff0c;avi 图片文件&#xff1a;jpeg&#xff0c;png&#xff0c;jpg 5.数据类型 python类型决定了当前变量在内存中的存储体积 字符串&#xff0c;字符&a…

13.UE5流星火雨,引导施法技能制作

2-15 流星火雨&#xff0c;引导施法技能制作、随机数_哔哩哔哩_bilibili 目录 1.为流星火雨添加按键映射 2.创建流星火雨的动画蒙太奇 3.实现播放动画蒙太奇的逻辑 ​编辑 4.定义发射一波流星火雨的发射物 5.使用动画通知释放流星火雨 1.为流星火雨添加按键映射 创建名为流…

【python程序】恢复曾经删除的QQ说说

是否还能想起曾经的QQ说说&#xff0c;是否还想知道自己以前删除了什么 今天就给大家介绍下这个可以恢复以前删除的QQ说说的 小工具 这个工具是由python编写的&#xff0c;也已经打包好了小程序&#xff0c;一键运行 具体下载地址&#xff1a;https://pan.quark.cn/s/b3f41e3…

Springboot 整合 Java DL4J 打造企业知识图谱构建系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

goroutine 介绍

引子&#xff1a; 线程比如打开腾讯视频然后开始下载多个视频&#xff0c;下载任务就是线程 但是这并不是同时进行的&#xff0c;只是时间片比较短切换的比较快 进程和线程的关系 有些程序可以多进程有些可能不支持 并发和并行 并发和并行的根本区别是&#xff1a;并发在同一时…

Ubuntu[无桌面]——修改Docker镜像源文件

下载镜像的时候&#xff0c;一般有两种方式&#xff1a; &#xff08;1&#xff09;在宿主主机配置相应的文件/etc/docker/daemon.json&#xff0c;配置镜像源环境地址 &#xff08;2&#xff09;进入https://quay.io/search中&#xff0c;输入搜索需要下载的镜像名称&#xff…

Linux开发讲课49--- Linux 启动过程分析

理解运转良好的系统对于处理不可避免的故障是最好的准备。 启动过程非常简单。内核在单核上以单线程和同步状态启动&#xff0c;似乎可以理解。但内核本身是如何启动的呢&#xff1f;initrd&#xff08;initial ramdisk&#xff09; 和引导程序(bootloader)具有哪些功能&#…

简单安全的密码生成器PSWD

在我们折腾的过程中&#xff0c;经常要生成 APP KEY、JWT_SECRET、SECRET_KEY 一类的参数&#xff0c;除了可以用 openssl rand 命令来生成外&#xff0c;也可以用在线的密码生成器来生成&#xff0c;例如我们今天介绍的 PSWD 什么是 PSWD ? PSWD 是一个简单且安全的密码生成…

【cursor添加azure】在cursor中添加azure的openai api

右上角-设置 会弹出 下拉找到azure 这部分从你的azure后台获取 返回cuesor&#xff0c;点击 输入你的模型名称 然后回车 就可以开始使用了&#xff5e;

JSqlParser、JavaCC实操

1. 背景 项目中使用mubatis-plus&#xff0c;有个sql报错&#xff0c;信息如下 通过debug我发现是第四行代码报错 net.sf.jsqlparser.parser.CCJSqlParserUtil#parseStatements public static Statements parseStatements(String sqls) throws JSQLParserException {CCJSqlP…

【人工智能训练师】3 集群搭建

开启集群环境 本次环境为单节点伪集群环境&#xff0c;环境中已经安装JDK1.8、Hadoop2.7.7、Mysql5.7、hive2.3.4。— 1.环境中已经安装/root/software/hadoop-2.7.7&#xff0c;格式化HDFS&#xff0c;开启集群&#xff0c;查看集群状态。&#xff08;HDFS端口为9000&#x…

力扣二叉树题解含思路(C++实现)

1.求二叉树的最近公共祖先&#xff1a; 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 假设这题的p&#xff0c;q分别为7和8&#xff0c;而它们的最近公共祖先肯定是为3。 这题我们大致的思路为保存p&#xff0c;q的绝对路径&#xff0c;接着通过存储的绝对路…

稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣

稀硫酸介质中 V 型球阀的材质选择与选型要点 在工业生产中&#xff0c;稀硫酸是一种常见的化学介质&#xff0c;对于输送和控制稀硫酸的阀门&#xff0c;正确的材质选择和选型至关重要。本文将介绍稀硫酸介质中 V 型球阀的材质选择&#xff0c;并提供一些选型的要点。 一、稀硫…

.NET6中WPF项目添加System.Windows.Forms引用

.NET6中WPF项目添加System.Windows.Forms引用 .NET6的WPF自定义控件默认是不支持System.Windows.Forms引用的&#xff0c;需要添加这个引用方法如下&#xff1a; 1. 在项目浏览器中找到项目右击&#xff0c;选择编辑项目文件&#xff08;Edit Project File&#xff09;。 …

【后端速成Vue】computed计算属性

前言&#xff1a; 本期将会介绍 Vue 中的计算属性&#xff0c;他和 methods 方法又会有什么区别呢&#xff1f;在这里都会给你一一讲解。 篮球哥找工作专属IT岗位内部推荐&#xff1a; 专属内推链接&#xff1a;内推通道 1、computed计算属性 概念&#xff1a; 基于现有的数据…

【论文笔记】The Power of Scale for Parameter-Efficient Prompt Tuning

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: The Power of Scale for P…

前端入门一之BOM、window对象常见事件、定时器、JS执行机制、location对象、navigatior对象、history对象

前言 JS是前端三件套之一&#xff0c;也是核心&#xff0c;本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点&#xff0c;这篇是BOM;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 BOM1、BOM概述2、window对象…

LeetCode 56.合并区间

思路&#xff1a; 类似于用最少的箭射气球题目&#xff0c;最主要是要处理区间之间是否有重叠&#xff0c;如果无重叠则加入数组&#xff0c;如果有重叠&#xff0c;则需要重新设判断的边界&#xff0c;与下一个区间继续判断。 难点在于 代码用法 需熟练掌握 思想简单&#…

14.UE5爆炸伤害,场景变暗,时间轴

2-16 爆炸伤害&#xff0c;球体监测&#xff0c;场景变暗、时间轴_哔哩哔哩_bilibili 目录 1.UE5的爆炸伤害 ​2.后期盒子实现场景变暗 1.UE5的爆炸伤害 进入流星火雨的发射物蓝图编辑器中 对我们以前的重叠事件进行回顾&#xff0c;并修改使之实现爆炸伤害的效果 这是我们…

现代无线通信接收机架构:超外差、零中频与低中频的比较分析

写在前面&#xff1a;本博客是对三种接收机架构的学习笔记&#xff0c;仅供个人学习记录使用。内容主要是上网查阅的资料&#xff0c;以及个人的一些理解。如有错误的地方请指出&#xff01; 文章目录 一、通信机基本架构1、射频发射级的基本组成及完成功能2、射频接收级的基本…