鉴于网上有很多图表的一些好的文章,我今天的主要利用git上的一个开源框架CombinedChart来实现下面的效果.

图一和图二是最近在温湿度设备上需要实现的两个图表,需求:利用折线图将最近一天,一周,一个月得数据以图标的形式显示出来,同时若为本周本月需要添加多个折线展示最大和最小数据的一个变化。在这里我们主要用的是git上的一个开源图表框架-CombinedChart。
CombinedChart可以绘制饼图,柱形图,折线图,这次需求重点需要绘制折线图,这里便对CombinedChart如何绘制折线图做一个详细得介绍。

首先我们对combinedChart进行初始化这里我们涉及到的属性有:

//创建的CombinedChart表格
lateinit var ccTempertureForm: CombinedChart
lateinit var ccHumidityForm: CombinedChart
//不显示描述内容ccTempertureForm.getDescription().setEnabled(true)//设置描述对象,对描述进行设置属性var description: Description = Description()//这里可以设置文字,文字颜色,文字类型description.text = ""//图表默认右下方的描述,参数是String对象ccTempertureForm.description = descriptionccTempertureForm.setBackgroundColor(Color.WHITE)//设置图网格背景是否显示,默认是falseccTempertureForm.setDrawGridBackground(false)//ccTempertureForm.setHighlightFullBarEnabled(false)//显示边界,就是最上面的一条线加粗的ccTempertureForm.setDrawBorders(false)//设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放ccTempertureForm.setPinchZoom(false) //设置是否可以拖拽,true可以左右滑动ccTempertureForm.setDragEnabled(true)//设置是否可以缩放,false不可以放大缩小ccTempertureForm.setScaleEnabled(false)//图例说明val legend: Legend = ccTempertureForm.getLegend()legend.isEnabled = false //不显示图例 底部的什么颜色代表什么的说明

在这里我们初始化完图表数据后,我们需要设置X轴得数据列表,X轴数据属性及数据源

//x轴显示位置ccHumidityForm.xAxis.position = XAxis.XAxisPosition.BOTTOM//网格显示颜色ccHumidityForm.xAxis.gridColor = R.color.color_aaf7f7f7//网格显示虚线ccHumidityForm.xAxis.enableGridDashedLine(10f, 10f, 20f)//添加x轴显示数据源ccHumidityForm.xAxis.valueFormatter = IndexAxisValueFormatter(xAxisHum)//getFormattedValue利用回调来设置修改x轴的值及添加其他的属性字符ccHumidityForm.xAxis.valueFormatter = object : IndexAxisValueFormatter(xAxisHum){override fun getFormattedValue(value: Float): String {return super.getFormattedValue(value)}}//设置数据限制个数ccHumidityForm.xAxis.setLabelCount(xAxisHum.size, true)//设置最小值从x开始ccHumidityForm.xAxis.mAxisMinimum = x//设置最大值至y结束ccHumidityForm.xAxis.mAxisMaximum = y
   //为了显示图中的效果这里显示的y轴是不显示的,这里我们设置属性:isenabled来将y轴的数据及边框网格隐藏//隐藏Y轴边线及数字ccTempertureForm.axisLeft.isEnabled = false

到这里我们将x与y轴的数据都设置完毕,现在也到了最重要的一步,设置图表,设置图表是要选好图标的类型,我这里设置的是折线图。

 //我们创建折线图对象val lineData = LineData()
折线图的数据源是通过entry来传入的他本是是一个与map一样由key与value组成:分别指坐标的x,y轴坐标
  //设置数据源entryval customCounts: MutableList<Entry> = ArrayList()for (t in 0 until yAxisTem.get(i).size) {//add entry()key作为x value作为y数据customCounts.add(Entry(t.toFloat(), yAxisTem[i][t].toFloat()))}//将数据源listc传入线性表对象内val lineDataSet = LineDataSet(customCounts, "high")//axisDependency以什么数据作为数据标定lineDataSet.axisDependency = YAxis.AxisDependency.LEFT//折线图颜色lineDataSet.color = jineColorDark//折线图样式lineDataSet.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);//设置坐标画圆lineDataSet.setDrawCircles(true)lineDataSet.setCircleColor(jineColorDark)lineDataSet.lineWidth = 2flineData.addDataSet(lineDataSet)

在这里因为我们图表上添加了数据得单位,因此我们可以利用ValueFormatter属性来添加数据得单位
利用匿名类来实现

  lineData.setValueFormatter(object : ValueFormatter(){override fun getFormattedValue(value: Float): String {//在这里返回的就是可以显示得数值而value得值就是前面传入折现表的值return value.toString()+"%"}})//设置是否显示数据点的数值lineData.setDrawValues(true)

到最后我们需要进行显示数据,及显示数据图表

 //绘制图表数据var data = CombinedData()//设置折线图数据data.setData(getHumLineHighData())ccHumidityForm.setData(data)ccHumidityForm.invalidate() //更新数据ccHumidityForm.setVisibleXRangeMaximum(10f) //设置图表最大可见和最小可见个数。既可以固定可见个数。这样少了也是固定宽度。不会变大。如果大于可见宽度则可以滑动查看ccHumidityForm.setVisibleXRangeMinimum(2f)

若数据为空我们可以设置一个对图表数据进行删除及CombinedChart.clear
最终实现结果:
当然再删除的同时我们可能也需要设置一下为空现实的文案属性为:setNoDataText()在显示数据的时候我们需要明确好图表最大可见和最小可见个数,本质上来说在设置x轴与y轴得到LabelCount时我们需要注意他的限制个数,但是美观我们需要将setVisibleXRangeMaximum与LabelCount一起设置,这样就会避免所有的数据都集中在坐标而让数据显得不美观
(在开发过程中不仅要注意这个还要注意对于控件设置LabelCount属性时,它有两个参数,第一个为x轴或y轴得显示个数,而第二个参数为时候精确还是模糊显示,在设置时若labelCount参数小于setVisibleXRangeMaximum设置得值,一定要将其设置成精确显示而大于的需要设置成模糊显示,这样才能让控件显示不错位)
总结:在做图表的过程中,遇到了很多问题,比如在一张图中需要设置多个折线图,本以为传入两个list就能解决最后发现list是由linedataset来设置的而linedateset是放入linedata进行存放的,存放后才可以进行显示,因此问题解决方法是创建两个lineDataSet 全都存入linedata,当然也需要注意
在存入数据的过程中不能之创建一个list,他们的地址相同,若在修改下一个list内的数据上一个存入的linedataset的list数据也会改变,因此务必创建linedataset时也要创建一个新的list存放数据源。

Android 图表-折线图相关推荐

  1. 使用echarts(二)自定义图表折线图

    自定义图表折线图 样式如下 代码如下 ```html Document ``` 详细参数说明: https://www.w3cschool.cn/echarts_tutorial/

  2. echarts图表折线图柱状图多个X轴Y轴以及一个Y轴反向

    echarts图表折线图柱状图多个X轴Y轴以及一个Y轴反向 option1: {color: ['#21E9F6', '#F2CE2E', '#EE2929', '#006DD9', '#1789FF ...

  3. android 字符串折线图,Android + MPAndroidChart 实现折线、柱形和饼状图

    本文讲讲怎么用 MPAndroidChart 框架实现折线图.柱形图.饼图,并且进行样式设置,达到和宣传图差不多的效果. 一开始看到 MPAndroidChart 的各种图表介绍图感觉很好看,但是直接 ...

  4. 新手如何画出自定义View(Android——自定义折线图)

    在正式开始之前 我还是打算先说几句废话: 1.本文章是让初学者画自定义View所以不会对代码进行过多的解释 2.为什么不用现有强大的图表框架 列如:Android HelloChart 或者 MPAn ...

  5. android 自定义折线图

    看图: 比较简陋,主要是通过canvas画上去的: package com.example.democurvegraph.view;import java.util.ArrayList; import ...

  6. Android 自定义折线图实现教程

    前言: 各位同学大家好,有段时间没有给大家更新文章了,具体多久我也记不清楚了.最近重新复习了一下原生安卓的知识点,写了一个安卓原生自定义折线图的效果,就想着分享给大家.希望帮助到各位学习和工作,那份废 ...

  7. android自定义折线图可左右滑动,25.Android自定义折线图,可左右滑动

    前言 最近项目需要折线图,自己就手画了一个,主要是锻炼下自己的自定义控件技术.控件没有实现惯性滑动,希望知道的朋友指教下. 效果图 hehe.gif 直接上代码 public class MyLine ...

  8. Android自定义折线图,可设置基准线,不同点颜色

    最近项目中需要用到折线图,发现了一款比较好用的折线图hellocharts,做了炫酷的动画以及折线图,柱状图,混合图都有涉及到,非常的棒,在此推荐一下. 但是使用过程中碰到这样的需求: ①:不同数据点 ...

  9. android自定义曲线控件,Android自定义折线图(可拖动显示)

    废话不多说先上图咯 图一 至于怎么做呢 咱们可以先获取下折线图数据分析一波 { "code": 200, "message": "", &q ...

最新文章

  1. swift - idfa(唯一标示/下载量/广告追踪)
  2. Android中asset文件夹和raw文件夹区别(转载)
  3. java 头像 微信群_仿微信群头像九宫格控件 LQRNineGridImageView
  4. 软中断amp;taskletamp;工作队列
  5. Excel Oledb设置
  6. Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean
  7. 华为云上可订阅F5_F5亮相华为云计算大会 解读云应用交付
  8. SQL Server有这些属性吗
  9. 【SQL*PLUS】Copy Command
  10. 用php判断大月小月,php 获取月第一天和最后一天 | 学步园
  11. Android屏幕适配之--自定义像素的缩放比例来实现屏幕适配
  12. 【笔记】如何配置kvm桥接网络
  13. JS纯前端导出PDF及分页和使用window.print()保存PDF
  14. 史上最全最新手机号码号段大全
  15. adc0808的c语言编程51,51单片机驱动ADC0808电路图C51及汇编程序
  16. 在r中弄方差分析表_使用R语言进行单因素方差分析
  17. AtCoder - ABC 168 - E(数学推理)
  18. 【项目】小餐馆(点餐系统)项目框架
  19. ARM嵌入式核心板介绍
  20. javaScript中原型和原型链的分析深究 —————— 开开开山怪

热门文章

  1. 面试必问问题【一】~~~~~~~~~~~~你有什么想要了解的?你有什么想问的?
  2. Android源代码目录结构分析及浅谈OS体系结构:
  3. 李忠汇编语言-初学-第十天
  4. 小程序源码:大红喜庆版UI猜灯谜又叫猜字谜-多玩法安装简单
  5. 磨砂MOXA无线AP AWK-4121 ping不通 丢包问题的解决
  6. MAC 快捷键,软件等配置
  7. 3-5V直推线路板 1.2V升压太阳能火焰灯单片机IC方案
  8. Deepin系统初长成
  9. Tomcat问题Cannot find /data/tomcat/bin/setclasspath.sh
  10. 修改公众号的微信管理员方法