当前位置: 首页 > news >正文

Android开发MPAndroidChart两条折线图

Android开发MPAndroidChart两条折线图

Android开发两条折线图效果,还是有一定难度的,难点它的起点不是坐标0的开始,还有数值上有背景图

一、思路:

用的是MPAndroidChart的BarChart

二、效果图:

在这里插入图片描述

三、关键代码:
// 联系:893151960
class TwoBarChartActivity : AppCompatActivity(){var mContext: Context? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_bar_chart_two)mContext = thisval twoDataBean = UtilHelper.JsonToObject(UtilHelper.getJson(mContext!!,"two_bar.json"), TwoDataBean::class.java)setLearnBarChart(twoDataBean.studyDetail!!.memberCount!!,twoDataBean.studyDetail!!.studyHour!!)}private fun getMaxMemberCount(memberCountList:List<MemberCount>):Float{var maxMember = 0ffor (member in memberCountList){if (member.number > maxMember){maxMember = member.number.toFloat()}}return maxMember}private fun getMaxStudyHour(studyHourList:List<StudyHour>):Float{var maxMember = 0ffor (member in studyHourList){if (member.number > maxMember){maxMember = member.number}}return maxMember}private fun setLearnBarChart(memberCountList:List<MemberCount>, studyHourList:List<StudyHour>) {barChart.description.isEnabled = falsebarChart.setDrawGridBackground(false) //不显示图表网格barChart.setDrawValueAboveBar(true) //绘制值在bar上barChart.axisRight.isEnabled = true//显示右边坐标系barChart.legend.isEnabled = true//显示图例barChart.setTouchEnabled(false)//设置是否点击树状图,不允许触碰,就没法在图上拉伸barChart.isDragEnabled = false//设置是否可以拖拽,缩放//获取X轴val xAxis = barChart.xAxisxAxis.position = XAxis.XAxisPosition.BOTTOMxAxis.textSize = 10fxAxis.setDrawGridLines(false)//xAxis.setDrawAxisLine(true)xAxis.textColor = resources.getColor(R.color.c_33)xAxis.setCenterAxisLabels(true)xAxis.axisMinimum = 0f  //设置X轴的值(最小值、最大值、然后会根据设置的刻度数量自动分配刻度显示),要设最小,最大值,避免出现最右边的柱形看不见xAxis.axisMaximum = memberCountList.size.toFloat()//granularity是x轴在图缩放时值的间隔按比例变化,设为2f,即间隔为2倍//xAxis.granularity = 1f  //默认为1fxAxis.valueFormatter = IAxisValueFormatter { value, _ -> memberCountList[Math.min(Math.max(value.toInt(), 0), memberCountList.size - 1)].day }//下面是不需要的,写上用法备用//xAxis.setLabelCount(12,true) //第二个参数表示是否平均分配 如果为true则按比例分为12个点、如果为false则适配X刻度的值来分配点,可能没有12个点//获取Y轴val leftAxis = barChart.axisLeftleftAxis.axisMinimum = 0fvar maxLeft = getMaxMemberCount(memberCountList)if (maxLeft == 0f){maxLeft = 5f}leftAxis.axisMaximum = maxLeftleftAxis.spaceTop = 20fleftAxis.granularity = 1f//绘制虚线leftAxis.enableGridDashedLine(10f, 10f, 0f)//是否绘制0所在的网格线leftAxis.setDrawZeroLine(true)leftAxis.textSize = 10fleftAxis.textColor = resources.getColor(R.color.c_33)leftAxis.setLabelCount(5, true)val rightAxis = barChart.axisRightrightAxis.axisMinimum = 0fvar maxRight = getMaxStudyHour(studyHourList)if (maxRight == 0f){maxRight = 1f}rightAxis.axisMaximum = maxRightrightAxis.spaceTop = 20frightAxis.granularity = 1f//绘制虚线rightAxis.enableGridDashedLine(10f, 10f, 0f)//是否绘制0所在的网格线rightAxis.setDrawZeroLine(true)rightAxis.textSize = 10frightAxis.textColor = resources.getColor(R.color.c_33)rightAxis.setLabelCount(5, true)//        rightAxis.valueFormatter = IAxisValueFormatter { value, _ ->
//            val mFormat = DecimalFormat("###")
//            mFormat.format(value.toDouble())
//        }//        leftAxis.valueFormatter = IAxisValueFormatter { value, _ ->
//            val mFormat = DecimalFormat("###")
//            mFormat.format(value.toDouble())
//        }//图例barChart.getLegend().isEnabled = true //如果没法控制图例和图表之间的距离,图例不显示,改为手动添加相应的view显示val  legend = barChart.getLegend()legend.setForm(Legend.LegendForm.SQUARE)legend.setTextSize(11f)//显示位置legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP)legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT)legend.setOrientation(Legend.LegendOrientation.HORIZONTAL)//是否绘制在图表里面legend.setDrawInside(false)barChart.data = generateData(memberCountList,studyHourList)barChart.animateY(700)}//设置数据private fun generateData(memberCountList:List<MemberCount>, studyHourList:List<StudyHour>): BarData {val entries = ArrayList<BarEntry>()for (i in memberCountList.indices) {entries.add(BarEntry(i.toFloat(), memberCountList[i].number.toFloat()))}val d = BarDataSet(entries, "学习人数(单位:个)")d.color = resources.getColor(R.color.c_32c5ff)//树状图颜色d.axisDependency = YAxis.AxisDependency.LEFT//人数为整数d.setValueFormatter { value, _, _, _ ->value.toInt().toString()}val entries2 = ArrayList<BarEntry>()for (i in studyHourList.indices) {entries2.add(BarEntry(i.toFloat(), studyHourList[i].number))}val d2 = BarDataSet(entries2, "学习时长(单位:小时)")d2.color = resources.getColor(R.color.c_73deb3)//树状图颜色d2.axisDependency = YAxis.AxisDependency.RIGHTd2.setValueFormatter { value, _, _, _ ->value.toInt().toString()}val sets = ArrayList<IBarDataSet>()sets.add(d)sets.add(d2)val groupSpace = 0.3fval barSpace = 0.05f //两个柱之间间隔val barWidth = (1f-groupSpace)/sets.size -0.05f//算式要满足:(barWidth + barSpace) * barAmount + groupSpace = (0.3 + 0.05) * 2 + 0.3 = 1.00  这样才可以x坐标和柱形对齐val cd = BarData(sets)cd.setValueTextSize(8f)cd.barWidth = barWidth//设置树状图宽度cd.groupBars(0f,groupSpace, barSpace)
//
//        cd.setValueFormatter { value, _, _, _ ->
//
//            val mFormat = DecimalFormat("###")
//            mFormat.format(value.toDouble());
//        }return cd}
}
四、项目demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码的私信我

相关文章:

Android开发MPAndroidChart两条折线图

Android开发MPAndroidChart两条折线图 Android开发两条折线图效果&#xff0c;还是有一定难度的&#xff0c;难点它的起点不是坐标0的开始&#xff0c;还有数值上有背景图 一、思路&#xff1a; 用的是MPAndroidChart的BarChart 二、效果图&#xff1a; 三、关键代码&#…...

HTML-ES6.0核心技术

1.ES6简介 ECMAScript 6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在2015年6月正式发布了。它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语言。ECMAScript 和 JavaScri…...

车间调度问题数学建模与CPLEX优化

完成了这些基础研究工作&#xff0c;整理成文档以供参考 序言... i 第一章 引言... 1 1.1 车间调度问题概述... 1 1.2 车间调度问题分类表示法... 5 1.3 车间调度对制造企业的作用... 6 1.4 本章小结... 7 第二章 CPLEX基础... 8 2.1 CPLEX概述... 8 2.1.1 CPLEX简介.…...

< 基础物理 >

SI国际单位制 常见的公制单位 为什么需要单位&#xff0c;是统一衡量的标准 通过国际单位&#xff0c;以及单位的拓展&#xff0c;以及单位的组合&#xff0c;形成一系列新的测量单位 面积 m^2 速率 m/s 米每二次方秒&#xff0c;m / s, delta表示增量, 每秒移动多少米 加…...

【web开发】Spring Boot 快速搭建Web项目(三)

Date: 2024.08.31 18:01:20 author: lijianzhan 简述&#xff1a;根据上篇原文Spring Boot 快速搭建Web项目&#xff08;二&#xff09;&#xff0c;由于已经搭建好项目初始的框架&#xff0c;以及自动创建了一个启动类文件&#xff08;TestWebApplication.java&#xff09; …...

无人机之战斗机的详解!

一、高性能飞行能力 高速飞行&#xff1a;具备较高的巡航速度和最大飞行速度&#xff0c;以便快速抵达任务区域并灵活应对战场情况。 长航程&#xff1a;拥有足够的航程以执行远程任务&#xff0c;覆盖广阔的作战区域 高升限&#xff1a;能够飞行到较高的高度&#xff0c;以…...

Verilog基础:时序调度中的竞争(四)(描述时序逻辑时使用非阻塞赋值)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言&#xff0c;Verilog HDL常常需要使用语句描述并行执行的电路&#xff0c;但其实在仿真器的底层&#xff0c;这些并行执行的语句是有先后顺序…...

嵌入式边缘计算软硬件开发“1+X”考证建设方案

一、引言 随着物联网、大数据、人工智能等技术的飞速发展&#xff0c;嵌入式边缘计算作为连接物理世界与数字世界的桥梁&#xff0c;其重要性日益凸显。为了适应行业对高技能人才的需求&#xff0c;推动嵌入式边缘计算技术的普及与应用&#xff0c;特制定本“1X”考证建设方案…...

ES8的Java API client 8.0 简单示例操作 Elasticsearch

1.加入依赖 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.12.2</version></dependency>2.配置类 Slf4j Configuration public class ElasticSearchConfig {Valu…...

多线程CompletableFuture

最近发现同事整理了一个不错的关于CompletableFuture的文档&#xff0c;在这里记录一下&#xff0c;方便以后工作备用 CompletableFuture future CompletableFuture.supplyAsync(() -> {return "开新线程异步执行"; })result future.get(); // 线程阻塞等待结果…...

AR传送门+特定区域显示内容+放大镜 效果着色器使用

AR传送门特定区域显示内容放大镜 效果 关键词&#xff1a;Portal Mask 1、教程链接&#xff1a; AR 传送门教程 Unity - Portal Mask Implementation - Part 4_哔哩哔哩_bilibili 应用案例效果&#xff1a; 2、案例下载地址&#xff1a;使用unity 2021.3.33f1 obi 工具…...

设置Hadoop守护进程的JVM参数

一般情况下我们不去动守护进程的JVM&#xff0c;这里的守护进程说的是NameNode、DataNode等Hadoop服务自己本身的进程。但是有一些特殊情况下需要限制&#xff0c;比如工作中虽然集群中资源队列会有10%左右的预留空余&#xff0c;不过这是整个集群队列的限制&#xff0c;对于Da…...

可视化大屏

可视化大屏 是一种利用计算机图形学技术&#xff0c;将复杂的数据和信息转换为直观的可视化图形&#xff0c;以呈现数据信息的工具。它不仅在电影中常见&#xff0c;而且已经实实在在地被应用在商业、金融、制造等各个行业的业务场景中&#xff0c;成为大数据分析和展示的重要工…...

pytest框架

pytest测试框架 单元测试框架定义&#xff1a;针对软件开发最小的单元&#xff08;函数&#xff0c;方法&#xff09;进行正确性位置测试 单元测试框架&#xff1a;java&#xff08;junit&#xff0c;testing&#xff09;python&#xff08;unittest&#xff0c;pytest&#…...

基于大数据的亚健康人群数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…...

黄金短线交易策略:波动中的高效盈利之法

今日&#xff0c;亚市盘初&#xff0c;现货黄金就高位震荡。在昨日金价再度冲高&#xff0c;一度刷新历史高点至2685.49美元&#xff0c;收报2672.25美元。其中主要原因是美国公布了最新的核心PCE&#xff08;个人消费支出&#xff09;物价指数和初请失业金人数等经济数据&…...

西陆家政系统V1.0.1

微信小程序开发的西陆家政服务管理系统小程序 V1.0.1bug修复优化 1.修复首页轮播不能自动轮播问题;2.修复订单详情价格显示问题;3.修复在开放城市模式下,其他城市可以下单问题;4.修复个人二维码跳转小程序路径异常问题;5.修复小程序编辑我的地址选择定位后不刷新问题&#xf…...

时间安全精细化管理平台/iapp/mobile/facereg/facereg.html接口存在未授权访问漏洞

漏洞描述 登录--时间&安全精细化管理平台/iapp/mobile/facereg/facereg.html接口存在未授权访问漏洞&#xff0c;黑客可以未授权等级员工信息对平台造成影响 FOFA&#xff1a; body"登录--时间&amp;安全精细化管理平台" 漏洞复现 IP/iapp/mobile/facereg…...

自动化测试实例:Web登录功能性测试(无验证码)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是自动化测试 把人为驱动的测试行为转化为机器执行的一种过程称为自动化测试。(来自百度百科)本质上来说&#xff0c;自动化测试对比起手工测试除了需要…...

【算法篇】二叉树类(3)(笔记)

目录 一、Leetcode 题目 1. 二叉树的最近公共祖先 2. 二叉搜索树的最近公共祖先 &#xff08;1&#xff09;递归法 &#xff08;2&#xff09;迭代法 3. 二叉搜索树中的插入操作 &#xff08;1&#xff09;递归法 &#xff08;2&#xff09;迭代法 4. 删除二叉搜索树中…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理&#xff1a;检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目&#xff1a;RankRAG&#xff1a;Unifying Context Ranking…...