1.添加依赖

compile ‘com.github.PhilJay:MPAndroidChart:v3.0.2’

2.在布局文件中添加RelativeLayout,相当于一个容器,目的是可以在界面动态刷新数据

    <RelativeLayout
        android:id="@+id/line_chat_rl"android:layout_width="match_parent"android:layout_height="wrap_content"/>

3.初始化控件

RelativeLayout line_chat_rl = (RelativeLayout) findViewById(R.id.line_chat_rl);

在加载数据前,判断是否当前界面第一次加载折线数据,目的是清除上一次的请求的数据

private boolean isloadChatLineData = false;//是否当前界面加载过折线数据
private List<Integer> list = new ArrayList<>();//数据集合
private List<String> names = new ArrayList<>();// 折线名字集合
private List<Integer> colour = new ArrayList<>();//折线颜色集合
 if (isloadChatLineData) {line_chat_rl.removeAllViews();names.clear();colour.clear();}//设置折线图表格的宽(屏幕的款)和高(800px)
LineChart  lineChart = new LineChart(this);lineChart.getAxisRight().setEnabled(false);//去除表右边值lineChart.setMinimumWidth(screenWidth);lineChart.setMinimumHeight(800);line_chat_rl.addView(lineChart);//折线的名字names.add("收入");names.add("支出");names.add("利润");//折线颜色colour.add(Color.RED);colour.add(Color.GREEN);colour.add(Color.BLUE);//折线初始化MyLineChartManager myLineChartManager = new MyLineChartManager(lineChart, names, colour);

4.请求数据,显示折线图

根据自己的服务器设计的需求来,这是我项目设计的接口

    error_no:       @int, 返回状态码, 0-表示接口返回正常error_msg:      @str, error_no不为0时的错误提示信息data: {month_income:       @str, 本月收入month_spending:     @str, 本月支出month_profits:      @str, 本月利润date_list: [{day:                    @str, 日期income:                 @float, 收入spending:               @float, 支出profits:                @float, 利润},...]}

获取数据之后,进行解析,获取收入,支出,利润三个值的最大值和最小值,这个过程需要你自己来进行计算,然后折线图进行再次设置

myLineChartManager.setYAxis("y轴最大值", "轴最小值",y轴设置点的个数);

折线图添加数据

 //一次一次追加数据,折线也是追加,并清除上一次的集合,说白了,就是不断遍历者一个月同一天的收入,支出,利润3个数据添加list中for (int k = 0; k < monthDataBean.data.date_list.size(); k++) {list.add((int) (monthDataBean.data.date_list.get(k).income));list.add((int) (monthDataBean.data.date_list.get(k).spending));list.add((int) (monthDataBean.data.date_list.get(k).profits));myLineChartManager.addEntry(list, k + 1 + "日");list.clear();}//是否当前界面加载过折线数据,设置为trueisloadChatLineData = true;

5.折线入的封装

public class MyLineChartManager {private LineChart lineChart;private YAxis leftAxis;private YAxis rightAxis;private XAxis xAxis;private LineData lineData;private LineDataSet lineDataSet;private List<ILineDataSet> lineList = new ArrayList<>();private SimpleDateFormat df = new SimpleDateFormat("ss");//设置日期格式private List<String> timeList = new ArrayList<>(); //存储x轴的时间private Entry entry;//多条曲线构造public MyLineChartManager(LineChart mLineChart, List<String> lineNames, List<Integer> lineColors) {this.lineChart = mLineChart;leftAxis = lineChart.getAxisLeft();rightAxis = lineChart.getAxisRight();xAxis = lineChart.getXAxis();initLineChart();//初始化表格initLineDataSet(lineNames, lineColors);//初始化线//leftAxis.setValueFormatter(new CustomYValueFormatter(true));//rightAxis.setValueFormatter(new CustomYValueFormatter(true));}/*** 初始化LineChar*/private void initLineChart() {lineChart.setDrawGridBackground(true);//显示背景lineChart.setDrawBorders(true);//显示边界//折线图例 标签 设置Legend legend = lineChart.getLegend();legend.setForm(Legend.LegendForm.LINE);legend.setTextSize(11f);//显示位置legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);legend.setDrawInside(false);//X轴设置显示位置在底部xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);xAxis.setGranularity(1f);xAxis.setLabelCount(10);xAxis.setValueFormatter(new IAxisValueFormatter() {@Overridepublic String getFormattedValue(float value, AxisBase axis) {return timeList.get((int) value % timeList.size());}});//保证Y轴从0开始,不然会上移一点leftAxis.setAxisMinimum(0f);rightAxis.setAxisMinimum(0f);}/*** 初始化折线(多条线)** @param lineNames* @param lineColors*/private void initLineDataSet(List<String> lineNames, List<Integer> lineColors) {for (int i = 0; i < lineNames.size(); i++) {//遍历线的集合lineDataSet = new LineDataSet(null, lineNames.get(i));//逐一创建新的线,线的属性值集合lineDataSet.setColor(lineColors.get(i));lineDataSet.setLineWidth(1f);lineDataSet.setCircleRadius(3f);lineDataSet.setColor(lineColors.get(i));lineDataSet.setHighlightEnabled(false);//去除十字高亮// lineDataSet.setDrawHighlightIndicators(false);lineChart.setScaleEnabled(false);lineDataSet.setDrawFilled(false);lineDataSet.setCircleColor(lineColors.get(i));//  lineDataSet.setHighLightColor(lineColors.get(i));//高亮颜色// lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);//默认折线lineDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);//标注lineDataSet.setValueTextSize(0f);lineList.add(lineDataSet);//添加线的集合}//添加一个空的 LineDatalineData = new LineData();lineChart.setData(lineData);lineChart.invalidate();}/*** 动态添加数据(多条折线图)** @param threeSingleLineList*/public void addEntry(List<Integer> threeSingleLineList, String days) {if (lineList.get(0).getEntryCount() == 0) {//y值的集合lineData = new LineData(lineList);lineChart.setData(lineData);}timeList.add(days);for (int i = 0; i < threeSingleLineList.size(); i++) {entry = new Entry(lineDataSet.getEntryCount(), threeSingleLineList.get(i));//获取单个线lineData.addEntry(entry, i);//单个线逐渐加点lineData.notifyDataChanged();//单个点追加,刷新lineChart.notifyDataSetChanged();lineChart.setVisibleXRangeMaximum(6);lineChart.moveViewToX(0);//显示的位置//lineChart.moveViewToX(lineData.getEntryCount() - 5);}}/*** 设置Y轴值** @param max* @param min* @param labelCount*/public void setYAxis(float max, float min, int labelCount) {if (max < min) {return;}leftAxis.setAxisMaximum(max);leftAxis.setAxisMinimum(min);leftAxis.setLabelCount(labelCount, false);rightAxis.setAxisMaximum(max);rightAxis.setAxisMinimum(min);rightAxis.setLabelCount(labelCount, false);lineChart.invalidate();}/*** 设置高限制线** @param high* @param name*/public void setHightLimitLine(float high, String name, int color) {if (name == null) {name = "高限制线";}LimitLine hightLimit = new LimitLine(high, name);hightLimit.setLineWidth(4f);hightLimit.setTextSize(10f);hightLimit.setLineColor(color);hightLimit.setTextColor(color);leftAxis.addLimitLine(hightLimit);lineChart.invalidate();}/*** 设置低限制线** @param low* @param name*/public void setLowLimitLine(int low, String name) {if (name == null) {name = "低限制线";}LimitLine hightLimit = new LimitLine(low, name);hightLimit.setLineWidth(4f);hightLimit.setTextSize(10f);leftAxis.addLimitLine(hightLimit);lineChart.invalidate();}/*** 设置描述信息** @param str*/public void setDescription(String str) {Description description = new Description();description.setText(str);lineChart.setDescription(description);lineChart.invalidate();}
}

android客户端动态折线图相关推荐

  1. Android之绘制动态折线图

    所谓动态折线图,就是折线图能随着手指的滑动进行动态绘制,这里很定会产生动画效果.基于这个效果,这里使用SurfaceView进行制图. 实现步奏如下: (1): 这里新建一个绘图ChartView,继 ...

  2. 动态折线图 python_python 怎么做个动态折线

    本文,用python调用matplotlib模块,画一个动态折线图. 工具/原料 电脑 python3.6(Anaconda) matplotlib模块 方法/步骤 1 先画一系列的折线图,代码如下图 ...

  3. Qt工作笔记-动态折线图(x轴坐标会改变)

    运行截图如下: 逻辑很简单,下面直接放代码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include & ...

  4. 模拟Windows任务管理器CPU使用率的动态折线图-农夫山泉

    Delphi的TCanvas类可以实现各种复杂的图形输出功能,基于近期项目的需求,利用它实现了一个很炫的动态折线图(模拟了资源管理器中CPU使用率的折线图),可以直观地展现出数值的实时变化情况. 这段 ...

  5. [VUE2/VUE3]基于echarts的动态折线图组件

    [VUE2/VUE3]基于echarts的动态折线图组件 时间格式化代码 export default function formatSecond(value: number) {let millis ...

  6. 3分钟学会制作动态折线图!

    在进行数据报表综合分析对走势进行展示时,折线图的展示效果会更加清晰,而动态折线图则进一步增强了展示的效果,实现智能数据可视化. 上期为大家介绍了动态折线图在数据可视化平台的使用方法,这次向大家介绍一些 ...

  7. 动态折线图,制作原来是这么简单

    动态折线图,依据动态资料所绘制成的多角曲线图.通常用横轴代表时间,纵轴代表指标数值,每个时间与指标值形成坐标点,将各相邻两坐标点用直线相连,即构成动态折线图. 从上图得知,近一年汽油与柴油的价格总体呈 ...

  8. echarts动态折线图拉扯变形问题

    echarts动态折线图拉扯变形问题 在使用echarts折线图 做动态数据展示时,发现一个bug 当折线图的一个数值较高点紧挨着一个数值为零的点,guyong时图形会被拉扯,应该是echart的bu ...

  9. 迪赛智慧数——折线图(动态折线图):2001- 2020中国城镇收入、房价、GDP、通货增长对比

    效果图 中国城镇居民人均可支配收入增长迅速.从2001年的6824元到2020年的43834元,2020年与2001年相比增长近6倍,增速超过全国房价平均增速.从数据看整体收入增速是高于房价.CPI和 ...

最新文章

  1. IBM发布人脸识别最强工具,多样性数据集,100万张人脸图像!
  2. 互联网大脑进化简史,华为云EI智能体加入-2018年7月新版
  3. 安卓开发网络资源汇总
  4. DirectX9 SDK 下载、安装、VC++开发环境配置、跑通第一个例子
  5. 异步fifo_FPGA设计基础——FIFO的应用
  6. 当前没有可用的服务器_调研Redis高可用两种方案
  7. 如何看出男朋友有没有潜力?
  8. Maven——安装(二)
  9. windows系统bat批处理 mysql 脚本启动关闭
  10. python arduino 蓝牙_如何使用蓝牙模块从Android设备控制Arduino
  11. 摩托罗拉linux专属游戏,摩托罗拉E680软件以及游戏应用大全
  12. json字符串转json对象
  13. github注册以及安装教程
  14. java代码上传到私服,maven上传源码到私服(示例代码)
  15. 倒计时3天!这届XIN公益大会很不一般!
  16. 安防大数据时代,IP摄像机的发展历程
  17. opencv Fast特征提取函数
  18. java中insteadof_Java代码规范小结(一)
  19. 揭秘微信新骗局:微信扫码进群付费暗雷源码 诱导支付百倍暗雷程序-如何判刑,如何举报?
  20. mysql更新表时自动生成时间和更新时间

热门文章

  1. mysql碎片整理innodb_Innodb表碎片整理
  2. VC++6.0显示代码行号【成功破解行数显示限制,完全免费!!!】
  3. windows中常见后门持久化方法总结
  4. Nginx安装配置报错详解
  5. 实现学生信息的多关键字排序
  6. win10 android软件下载,windows10模拟器安卓版
  7. Testin云测平台
  8. Microsoft CSP简介
  9. Python_np.sum()函数
  10. HAL库开发—基于stm32的智能小家电