近期项目里有要加入更加复杂的图标了,曾经一些简单的曲线图,饼状图。风险指示图等,都是自己画。随着难度的添加。越来越力不从心。曾经研究过achartenginee图标框架,但发现achartenginee的可定制性实在不敢恭维,做出来的图标根本不能满足需求。所以又在github上搜索android chart,发现了排第一的这款图标框架。大概预计了一下,是符合自己的要求的,于是down下来。研究研究,确实要比其它已知的框架强大。特此,总结一下其使用方法。

MPChart框架的长处:1.简单易用,全部的图标都能够当做一个普通的View在我们的布局文件里定义。与在布局中定义一个TextView没有不论什么的差别,使用也基本一样,通过fandViewById()就可以。然后向chart中加入数据就可以。

2.完好的事件冲突处理。在使用achartenginee时,发现图表一旦放在ScrollView中,则会产生事件冲突,导致ScrollView滑动不灵敏,而MPChart在事件处理上堪称完美。不仅在ScrollView中不会引起不论什么事件冲突,并且图表还能够夸张的放在LIstView,ViewPager中。不要太强大啊。

3.强大的可定制性,仅仅要是你能看到的。就能够改动为你想要的样式,这一点是我选择它的主要长处。

4.一句话就可实现的动画效果,但有点小bug.但作者还在不停的更新。

基于以上几点,我们基本能够抱起其它的图表框架而一心使用MPChart就可以,以下先看一下源代码demo的效果图,以及我自己定制的一个曲线图:

                           

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="474" width="373" alt="">

                        

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="463" width="413" alt="">

效果简直不谈啊,太强大了,必须学会使用啊。

以下讲一下我对其代码结构的理解:

1.源代码charts包中定义了全部能够绘制的图标类型。包含曲线图。饼状图,柱状图,散点图,以及混合图。

chart主要处理图表的交互事件。动画,组件的绘制等。

2.源代码components包中定义了图表中全部的组件,包含x轴(XAxis),y轴(YAxis)。表头(Lenged),标识(MarkerView).

3.源代码data包中则是不同类型的图表须要不同的数据类型。

4.源代码listener包中定义了全部的事件类型。

这几个包是我们须要知道的,通过chart包中的随意一个实例,能够进行我们须要的不论什么定制。比如:想要定制X轴的数据或者样式。

XAxis xAxis = mChart.getXAxis();

xAxis.setPosition(); //定制X轴是在图表上方还是下方。

xAxis.setLabelsToSkip(); //定制X轴Label间隔。

xAxis.setAvoidFirstLastClipping(); //定制X轴起点和终点Label不能超出屏幕。

Y轴的操作类似。

Lenged l = mChart.getLenged();

l.setEnabled(); //定制表头是否显示。

l.setForm();  //定制表头样式。是circle,square。还是line

等等,仅仅要是你能看到的样式,都能够定制。你没看到的也能够定制。以下列贴出第一个我定制的图的源代码:

  1. lineView = new LineChart(this);
  2. lineView.setDescription("");
  3. lineView.setScaleEnabled(false);
  4. lineView.getAxisRight().setEnabled(true);
  5. lineView.setDrawGridBackground(false);
  6. lineView.setTouchEnabled(false); //设置图表滑动是否可用
  7. lineView.getLegend().setEnabled(false); //设置表头不可用
  8. lineView.setHardwareAccelerationEnabled(true);
  9.  
  10. ArrayList<Entry> yRawData = new ArrayList<Entry>();
  11. ArrayList<String> xRawDatas = new ArrayList<String>();
  12. int index = 0;
  13. for (int i = array.length() - 1; i >= 0; i--)
  14. {
  15. if (array.get(i) != null)
  16. {
  17. JSONObject jsonObj = (JSONObject) array.get(i);
  18. yRawData.add(new Entry(Float.parseFloat(jsonObj.optString("profitRate")), index));
  19. xRawDatas.add(DateFormatHelp.formatDateToNeededFormat(jsonObj.optString("dt").concat("000"),
  20. DateFormat.DATE_1));
  21. index++;
  22. initMaxMin(Float.parseFloat(jsonObj.optString("profitRate")));
  23. }
  24. }
  25. /**
  26. * x轴样式设置
  27. */
  28. XAxis xAxis = lineView.getXAxis();
  29. xAxis.setPosition(XAxisPosition.BOTTOM);// 设置x轴在底部显示
  30. xAxis.setAvoidFirstLastClipping(true);
  31. xAxis.setSpaceBetweenLabels(0); // x轴间距
  32. xAxis.setTextColor(resource.getColor(R.color.grey_low_txt));
  33. xAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd));
  34. xAxis.setDrawGridLines(true);//设置是否显示横轴表格
  35. xAxis.setGridColor(resource.getColor(R.color.color_dddddd));//设置x轴表格颜色
  36. /**
  37. * y轴样式设置
  38. */
  39. YAxis leftAxis = lineView.getAxisLeft();
  40. leftAxis.setStartAtZero(false);
  41. leftAxis.setLabelCount(yAxislabelNum, true); //设置Y轴Label数量
  42. leftAxis.setDrawLimitLinesBehindData(true);
  43. leftAxis.setTextColor(resource.getColor(R.color.grey_low_txt)); //设置左側Y轴Label颜色
  44. leftAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd)); //设置左側Y轴颜色
  45.  
  46. leftAxis.setDrawGridLines(true); //设置显示Y轴表格线
  47. leftAxis.setGridColor(resource.getColor(R.color.color_dddddd)); //设置Y轴表格线颜色
  48. leftAxis.setAxisMaxValue(yAxisMax + yAxisGap); // 设置Y轴最大值
  49. leftAxis.setAxisMinValue(yAxisMin - yAxisGap);// 设置Y轴最小值
  50.  
  51. YAxis rightAxis = lineView.getAxisRight();
  52. rightAxis.setDrawLabels(false); //设置右側Y轴是否显示 Label
  53. rightAxis.setDrawGridLines(false);
  54. rightAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd));
  55. /**
  56. * 曲线样式设置
  57. */
  58. LineDataSet set = new LineDataSet(yRawData, "");
  59. set.setDrawCubic(true); //设置曲线样式为cubie
  60. set.setCubicIntensity(0.2f);//置曲线顺滑度
  61. set.setLineWidth(Util.dip2px(this, 1.0f)); //射置曲线width
  62. set.setColor(resource.getColor(R.color.color_fd4634));//射置曲线颜色
  63. set.setCircleSize(Util.dip2px(this, 2.0f));//射置曲线上圆点大小
  64. set.setCircleColor(resource.getColor(R.color.color_fd4634));//射置曲线上圆点颜色
  65. set.setFillColor(resource.getColor(R.color.color_fd4634));//射置曲线填充颜色
  66. set.setFillAlpha(128);//射置曲线填充颜色透明度
  67. set.setDrawFilled(true);//设置曲线填冲是否启用
  68. set.setDrawValues(false);//设置是否显示点值
  69. LineData data = new LineData(xRawDatas, set);
  70. lineView.setData(data);//绑定数据到图表
  71. lineView.invalidate();
  72.  
  73. LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, Util.dip2px(this, 150));
  74. contentLayout.addView(lineView, params);

学会使用这个图表框架后。效率能够大大的提高。普通的图表需求也不用在操心了。。

android MPChart图标使用具体解释的更多相关文章

  1. Android应用图标微技巧,8.0系统中应用图标的适配

    现在已经进入了2018年,Android 8.0系统也逐渐开始普及起来了.三星今年推出的最新旗舰机Galaxy S9已经搭载了Android 8.0系统,紧接着小米.华为.OV等国产手机厂商即将推出的 ...

  2. Android中的动画具体解释系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自己定义动画.这一篇我们来看看怎样将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 ...

  3. Android Google Map v2具体解释:开发环境配置

    Android Google Map v2具体解释:开发环境配置                                       --转载请注明出处:coder-pig 说在前面: 说到地 ...

  4. Android系统APN配置具体解释

     Android 系统APN配置具体解释 这些天一直在调系统原生的Settings.apk里面APN配置的问题.在设置里面手动添加了APN配置选项.可是在界面上还是看不到.所以跟了下代码.原以为就是简 ...

  5. ANDROID L——Material Design详细解释(UI控制)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  6. Android开发之异步具体解释(二)之AsyncTask

    请尊重他人的劳动成果,转载请注明出处:Android开发之异步具体解释(二)之AsyncTask http://blog.csdn.net/fengyuzhengfan/article/details ...

  7. Flutter - 创建自适应的Android app 图标

    上一篇文章说到  Flutter - 自动生成Android & iOS图标 通过flutter_launcher_icons 可以一键生成所有的Icon 到此基本什么问题也没有,如果你用io ...

  8. React native 之android的图标和启动图片

    哎哎呀呀,上篇说到了react native的IOS的图标和启动图片的设置,其实最主要的是尺寸!相应的尺寸设定好了以后就不会报错了! ok~这篇说的是React native的android的图标和启 ...

  9. ANDROID L——Material Design具体解释(动画篇)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

随机推荐

  1. 习题:最短路计数(SPFA最短路计数)

    最短路计数(洛谷1144)题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条.输入输出格式输入格式:输入第一行包含2个正整数N,M,为图的顶点数 ...

  2. BZOJ 4460 [Jsoi2013]广告计划 ——Bitset 后缀自动机

    发现n比较小,直接枚举答案,然后发现连续的一段是确定的,然后我们只需要判断每个位置是否有这个连续的一段就好了 发现起点不同,最后的位置可能会有差距,所以DP一下就好了 然后用0表示未折返,1表示从最下 ...

  3. [暑假集训--数论]poj1730 Perfect Pth Powers

    We say that x is a perfect square if, for some integer b, x = b 2. Similarly, x is a perfect cube if ...

  4. HTML+CSS 滚动条样式自定义 - 适用于 div,iframe, html 等

    友言:这两天被滚动条整的无与伦比,在此做下总结: 首先自定义浏览器滚动条的实现原理:计算浏览器滚动条的高度,层级1的高度与滚动条的总高度是一样的,通过相似比例计算: 浏览器滚动条总高度 :滚动条高度 ...

  5. iOS 之 判断是否是第一次打开app

    /** App判断第一次启动的方法 */ NSString *key = @"isFirst"; BOOL isFirst = [[NSUserDefaults standardU ...

  6. 用 config drive 配置网络

    上一节最后问了大家一个问题:如果 subnet 没有开 DHCP,会是怎样一个情况? 在其他条件不变的情况下,cloud-init 依然会完成那 3 个步骤,也就是说网卡还是会被配置成 dhcp 模式 ...

  7. POJ1195Mobile phones

    二维树状数组板子题. #include<cstdio> #include<cstring> #include<iostream> #include<cstdl ...

  8. cookie中存储json

    原文发布时间为:2009-12-14 -- 来源于本人的百度文章 [由搬家工具导入] http://www.denisdeng.com/?p=563 最近的一个项目需要在cookie中存储json对象 ...

  9. Console.Write格式化输出

    原文发布时间为:2009-03-02 -- 来源于本人的百度文章 [由搬家工具导入] C 或 c货币Console.Write("{0:C}", 2.5);   //$2.50Co ...

  10. 从头实现一个koa框架

    koajs是最流行的nodejs后端框架之一,有很多网站都使用koa进行开发,同时社区也涌现出了一大批基于koa封装的企业级框架.然而,在这些亮眼的成绩背后,作为核心引擎的koa代码库本身,却非常的精 ...