MpAndroidChart3最强实践攻略
创始人
2024-05-30 18:17:26
0

    本篇主要总结下Android非常火爆的一个三方库MpAndroidChart的使用。可能在大多数情况下,我们很少会在Android端去开发图表。但如果说去做一些金融财经类、工厂类、大数据类等的app,那么绝对会用到MpAndroidChart。

一、前言

    2018年,那年的我还很单纯,还没进入互联网。当时开发一个大数据平台项目,因此调研了Android端主流的图表三方库。其中,包括功能强大的MpAndroidChart、使用简单且体积较小的HelloCharts,以及在web前端非常火的Echarts。

    回到2023年的今天,我们再次去github瞄一眼。以当前github的star数来看,Echarts仍然是最强大的图表库,支持的图表种类也是最丰富的。然而由于Echarts不是NA的,在Android端使用并不方便。当然这不代表无法使用,我们可以让前端同学做一个H5页面,在WebView中去加载h5页面间接使用它。

    作为Android端的开发同学,既然我们可以NA来实现,那就不要考虑h5这种方式了。 其实绝大多数情况下,客户端展示的图表不会太花里胡哨,MpAndroidChart完全可以满足我们的诉求。

一、柱形图

    什么是柱形图?简单来讲,就是那种一个柱一个柱组成的图。真是听君一席话,如听一席话。。。看下百度百科的官方解释:

柱形图,又称长条图、柱状统计图条图条状图棒形图,是一种以长方形的长度为变量的统计图表。

    从百度图片随便搜了个柱形图,长这样,应该是统计七大洲平均海拔高度的柱形图,那我们接下来基于MpAndroidChart的BarChart去实现一样的效果。

    首先,这是单柱的简单的柱形图,数据源比较简单,就是一组七大洲的海拔高度数据,那我们直接按照api设置一下就好了。

/*** 设置数据源*/private void setData() {List barEntries = new ArrayList<>();barEntries.add(new BarEntry(0,1500));barEntries.add(new BarEntry(1,500));barEntries.add(new BarEntry(2,1500));barEntries.add(new BarEntry(3,2000));barEntries.add(new BarEntry(4,1000));barEntries.add(new BarEntry(5,500));barEntries.add(new BarEntry(6,1));BarDataSet barDataSet = new BarDataSet(barEntries,"标题一");BarData ba = new BarData(barDataSet);mBarChart.setData(ba);}

    效果长这样,非常原始的风格,看上去乱糟糟的,非常糟糕: 

     如果我们不对柱形图去做一些UI的设置,那么默认的效果是比较粗犷且不美观的。因此,接下来我们一步步去美化这个柱形图。

1、为不同的柱设置不同的颜色

    /*** 设置数据源*/private void setData() {List barEntries = new ArrayList<>();barEntries.add(new BarEntry(0,1500));barEntries.add(new BarEntry(1,500));barEntries.add(new BarEntry(2,1500));barEntries.add(new BarEntry(3,2000));barEntries.add(new BarEntry(4,1000));barEntries.add(new BarEntry(5,500));barEntries.add(new BarEntry(6,1));BarDataSet barDataSet = new BarDataSet(barEntries,"标题一");// 设置颜色List colors = new ArrayList<>();colors.add(Color.GRAY);colors.add(Color.GREEN);colors.add(Color.BLUE);colors.add(Color.RED);colors.add(Color.YELLOW);colors.add(Color.CYAN);colors.add(Color.BLACK);barDataSet.setColors(colors);BarData ba = new BarData(barDataSet);mBarChart.setData(ba);}

2、设置柱形图的样式

    private void initUI(){// 不显示图例mBarChart.getLegend().setEnabled(false);// 不显示描述mBarChart.getDescription().setEnabled(false);// 左右空出barWidth/2,更美观mBarChart.setFitBars(true);// 不绘制网格mBarChart.setDrawGridBackground(false);XAxis xAxis = mBarChart.getXAxis();// 设置x轴显示在下方xAxis.setPosition(XAxisPosition.BOTTOM);// 设置x轴不画线xAxis.setDrawGridLines(false);// 设置自定义的ValueFormatterString[] labels = {"北美洲","南美洲","欧洲","亚洲","大洋洲","非洲","南极洲"};xAxis.setValueFormatter(new ValueFormatter() {@Overridepublic String getFormattedValue(float value) {int index = (int) value;return labels[index];}});// 设置左y轴YAxis yAxis = mBarChart.getAxisLeft();// 设置y-label显示在图表外yAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART);// Y轴从0开始,不然会上移一点yAxis.setAxisMinimum(0f);// 设置y轴不画线yAxis.setDrawGridLines(false);// 不显示右y轴YAxis rightAxis = mBarChart.getAxisRight();rightAxis.setEnabled(false);}

     优化后,新的柱形图长这样:

相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...