Android柱状图
先来看效果
MPAndroidChart在github上地址:https://github.com/PhilJay/MPAndroidChart
1. 依赖:
Project 的build.gradle文件中添加
Project 的build.gradle文件中添加allprojects {repositories {maven { url 'https://jitpack.io' }}
}
然后在 module中的build,gradle 中添加dependencies {implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
}
2. 数据准备
{"vtDateValue": [{"fValue": 19,"sYearMonth": "豆腐"},{"fValue": 14.4348,"sYearMonth": "鱼虾"},{"fValue": 12.6504,"sYearMonth": "蔬菜"},{"fValue": 7.9092,"sYearMonth": "肉类"},{"fValue": 4.3995,"sYearMonth": "粮食"}],"vtDateValueAvg": [{"fValue": 0.95137,"sYearMonth": "粮食"},{"fValue": 3.50875,"sYearMonth": "肉类"},{"fValue": 4.62725,"sYearMonth": "蔬菜"},{"fValue": 1.38761,"sYearMonth": "鱼虾"},{"fValue": 0.61198,"sYearMonth": "豆腐"}]}
3 数据展示
public class BarChartActivity extends AppCompatActivity {private BarChart barChart;private YAxis leftAxis; //左侧Y轴private YAxis rightAxis; //右侧Y轴private XAxis xAxis; //X轴private Legend legend; //图例private LimitLine limitLine; //限制线@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_bar_chart);barChart = findViewById(R.id.bar_chart);initBarChart(barChart);BarChartBean barChartBean = LocalJsonAnalyzeUtil.JsonToObject(this,"bar_chart.json", BarChartBean.class);//处理数据是 记得判断每条柱状图对应的数据集合 长度是否一致LinkedHashMap<String, List<Float>> chartDataMap = new LinkedHashMap<>();List<String> xValues = new ArrayList<>();List<Float> yValue1 = new ArrayList<>();List<Float> yValue2 = new ArrayList<>();List<Integer> colors = Arrays.asList(getResources().getColor(R.color.blue), getResources().getColor(R.color.orange));List<BarChartBean.VtDateValueBean> valueList = barChartBean.getVtDateValue();List<BarChartBean.VtDateValueAvgBean> avgValueList = barChartBean.getVtDateValueAvg();Collections.reverse(valueList);for (BarChartBean.VtDateValueBean valueBean : valueList) {xValues.add(valueBean.getSYearMonth());yValue1.add((float) valueBean.getFValue());}for (BarChartBean.VtDateValueAvgBean valueAvgBean : avgValueList) {yValue2.add((float) valueAvgBean.getFValue());}chartDataMap.put("标准值", yValue1);chartDataMap.put("实际值", yValue2);showBarChart(xValues, chartDataMap, colors);}/*** 初始化BarChart图表*/private void initBarChart(BarChart barChart) {/***图表设置***///背景颜色barChart.setBackgroundColor(Color.WHITE);//不显示图表网格barChart.setDrawGridBackground(false);//背景阴影barChart.setDrawBarShadow(false);barChart.setHighlightFullBarEnabled(false);barChart.setDoubleTapToZoomEnabled(false);//禁止拖拽barChart.setDragEnabled(false);//X轴或Y轴禁止缩放barChart.setScaleXEnabled(false);barChart.setScaleYEnabled(false);barChart.setScaleEnabled(false);//禁止所有事件
// barChart.setTouchEnabled(false);//不显示边框barChart.setDrawBorders(false);//不显示右下角描述内容Description description = new Description();description.setEnabled(false);barChart.setDescription(description);//设置动画效果barChart.animateY(1000, Easing.Linear);barChart.animateX(1000, Easing.Linear);/***XY轴的设置***///X轴设置显示位置在底部xAxis = barChart.getXAxis();xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);xAxis.setGranularity(1f);leftAxis = barChart.getAxisLeft();rightAxis = barChart.getAxisRight();//不绘制 Y轴线条rightAxis.setDrawAxisLine(false);//不显示X轴网格线xAxis.setDrawGridLines(false);leftAxis.setDrawGridLines(false);rightAxis.setDrawGridLines(false);/***折线图例 标签 设置***/legend = barChart.getLegend();legend.setForm(Legend.LegendForm.SQUARE);legend.setTextSize(11f);//显示位置legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);//是否绘制在图表里面legend.setDrawInside(false);}/*** 柱状图始化设置 一个BarDataSet 代表一列柱状图** @param barDataSet 柱状图* @param color 柱状图颜色*/private void initBarDataSet(BarDataSet barDataSet, int color) {barDataSet.setColor(color);barDataSet.setFormLineWidth(1f);barDataSet.setFormSize(15.f);}/*** @param xValues X轴的值* @param dataLists LinkedHashMap<String, List<Float>>* key对应柱状图名字 List<Float> 对应每类柱状图的Y值* @param colors*/public void showBarChart(final List<String> xValues, LinkedHashMap<String, List<Float>> dataLists,@ColorRes List<Integer> colors) {List<IBarDataSet> dataSets = new ArrayList<>();int currentPosition = 0;//用于柱状图颜色集合的indexfor (LinkedHashMap.Entry<String, List<Float>> entry : dataLists.entrySet()) {String name = entry.getKey();List<Float> yValueList = entry.getValue();List<BarEntry> entries = new ArrayList<>();for (int i = 0; i < yValueList.size(); i++) {/*** 如果需要添加TAG标志 可使用以下构造方法* BarEntry(float x, float y, Object data)* e.getData()*/entries.add(new BarEntry(i, yValueList.get(i)));}// 每一个BarDataSet代表一类柱状图BarDataSet barDataSet = new BarDataSet(entries, name);initBarDataSet(barDataSet, colors.get(currentPosition));dataSets.add(barDataSet);currentPosition++;}//X轴自定义值xAxis.setValueFormatter(new IAxisValueFormatter() {@Overridepublic String getFormattedValue(float value, AxisBase axis) {return xValues.get((int) Math.abs(value) % xValues.size());}});rightAxis.setValueFormatter(new IAxisValueFormatter() {@Overridepublic String getFormattedValue(float value, AxisBase axis) {return "";}});BarData data = new BarData(dataSets);/*** float groupSpace = 0.3f; //柱状图组之间的间距* float barSpace = 0.05f; //每条柱状图之间的间距 一组两个柱状图* float barWidth = 0.3f; //每条柱状图的宽度 一组两个柱状图* (barWidth + barSpace) * 2 + groupSpace = (0.3 + 0.05) * 2 + 0.3 = 1.00* 3个数值 加起来 必须等于 1 即100% 按照百分比来计算 组间距 柱状图间距 柱状图宽度*/int barAmount = dataLists.size(); //需要显示柱状图的类别 数量//设置组间距占比30% 每条柱状图宽度占比 70% /barAmount 柱状图间距占比 0%float groupSpace = 0.3f; //柱状图组之间的间距float barWidth = (1f - groupSpace) / barAmount;float barSpace = 0f;//设置柱状图宽度data.setBarWidth(barWidth);//(起始点、柱状图组间距、柱状图之间间距)data.groupBars(0f, groupSpace, barSpace);barChart.setData(data);xAxis.setAxisMinimum(0f);xAxis.setAxisMaximum(xValues.size());//将X轴的值显示在中央xAxis.setCenterAxisLabels(true);}
Android柱状图相关推荐
- android 柱状图绘制,安卓MPAndroidChart绘制柱状图
首先是添加Jar包 进入Gradle Scripts的目录,添加Jar包都在这里 首先是Project这个的allprojects里面加上一行allprojects { repositories { ...
- Android 柱状图
依赖 compile 'org.xclcharts:lib:2.4' 自定义view1 /** * @ClassName DemoView * @Description 各个例子view的view基类 ...
- android 柱状图_安卓控件 仪表盘控件 柱状图控件 曲线控件 xamarin.android 分类器 瓶子控件 报警控件 水箱控件 进度条控件等...
本篇博客主要介绍一个控件库,HslControls.dll 的界面,这个控件库支持winform,winform的参考另一篇文章:https://www.cnblogs.com/dathlin/p/1 ...
- android 柱状图 监听,Android 开源柱状图分析实现
在平时开发中柱状形状偶尔会有项目需求,由于又一次开发需要,去找开源的组件都不好用,要不调用很不方便,要不它们类库太笨重,下面介绍一个轻巧方便控件,原理就是用View 重新绘画一个柱状图形控件,并适配所 ...
- android 分组柱状图_整理了一个 android 上的波形图及柱状图绘制控件
SimpleWaveform [说明:以前画过波形图,最近又需要画,略不同,但还得重复写.在网上搜了一下,只找到一个复杂的框架,而我们往往只需要画简单的波形或柱状图.所以我整理提取了过去的代码,有了这 ...
- Android鬼点子 100行代码,搞定柱状图!
最近,项目中遇到一个地方,要用到柱状图.所以这篇文章主要讲怎么搞一个柱子. 100行代码,搞定柱状图! 我的印象中柱子是这样的. 恩,简单,一个View直接放到xml,搞定! 但,设计师给的柱子是这样 ...
- java android统计图_Android统计图表之柱状图(条形图)
Android统计图表之柱状图(条形图) 柱状图是统计图表中经常用到的一种图表,比如降雨量之类的统计展示.我之前写了一些关于Android上的统计图表库MPAndroidChart,附录了一些我 ...
- Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
1.简介 AChartEngine(简称ACE)是Google的一个开源图表库(for Android).它功能强大,支持散点图.折线 .关于里面类的具体使用,请下载响应的文档说明(主页上有). 2. ...
- android 自定义横向堆积柱形图,MPAndroidChart项目实战(八)——自定义分段堆积柱状图...
一丶效果图 image.png 二丶需求分析及技术点 1.如效果图显示,当一样产品评论越多柱子越高可以展现热度,同一柱子不同颜色不同长度展示评论好坏对比, 自定义MarkView则显示详细数据,这就是 ...
- Android图表控件MPAndroidChart——BarChart实现多列柱状图以及堆积柱状图
目录 前言 1. 数据准备 1.1 数据来源 2. 图表展示 2.1 MPAndroidChart获取 2.2 数据对象获取 2.3 数据展示 3. 柱状图外观完善 3.1 去掉图表外框,描述内容以及 ...
最新文章
- SpringBoot 概念和起步
- 如果现在只能用汇编和 Goto 编程......
- Rsync命令参数详解
- ASP.NET WebAPi之断点续传下载(上)
- 十六进制数用int吗_你真的精通C语言吗?来解这十道C语言迷题试试吧!
- mysql 订单id格式_【mysql】订单规则id怎么生成?
- 大数据元数据管理系统功能有哪些
- 2012年参加油田象棋比赛的几盘棋
- 简单比较 http https http2
- Faster RCNN 网络分析及维度分析
- 计算机网络中什么是令牌,一个动画看懂网络原理之令牌环网的工作原理
- 能上QQ微信,打不开网页
- LeetCode : 390. 消除游戏(Elimination Game)分析和解答
- 墙绘装饰设计公司网站织梦模板免费下载
- 4.9 数值分析: 牛顿下山法
- Bsp开发的几个层次
- 32位与64位系统基本数据类型的字节数
- tableau 自定义版块地图
- 2022年数维杯国际大学生数学建模挑战赛C题如何利用大脑结构特征和认知行为特征诊断阿尔茨海默病解题过程
- mysql 多字段关键词模糊查询
热门文章
- java过滤器的作用_javaweb过滤器的作用,过滤器filter的作用是什么?
- 面试技巧之面试官常提的问题
- java后端getmonth_Java YearMonth getMonth()用法及代码示例
- java导出文件到excel文件怎么打开_java导入、导出Excel文件
- 《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第2章 TWen-ASR-ONE开发环境搭建与使用
- HP ProLiant DL380 Gen9 SPP更新固件的两种方式
- ZJUT 2012校赛决赛-涂颜色
- 微信声音锁会上传到服务器吗,微信声音锁原理是什么?微信声音锁安全吗?
- oracle数据库存储过程基本语法
- Unity编程笔录--实现360全景视频和VR视频