最近项目里有要添加更加复杂的图标了,以前一些简单的曲线图,饼状图,风险指示图等,都是自己画,随着难度的增加,越来越力不从心,以前研究过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的效果图,以及我自己定制的一个曲线图:

                           

                        

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

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

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

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

                lineView = new LineChart(this);lineView.setDescription("");lineView.setScaleEnabled(false);lineView.getAxisRight().setEnabled(true);lineView.setDrawGridBackground(false);lineView.setTouchEnabled(false); //设置图表滑动是否可用lineView.getLegend().setEnabled(false); //设置表头不可用lineView.setHardwareAccelerationEnabled(true);ArrayList<Entry> yRawData = new ArrayList<Entry>();ArrayList<String> xRawDatas = new ArrayList<String>();int index = 0;for (int i = array.length() - 1; i >= 0; i--){if (array.get(i) != null){JSONObject jsonObj = (JSONObject) array.get(i);yRawData.add(new Entry(Float.parseFloat(jsonObj.optString("profitRate")), index));xRawDatas.add(DateFormatHelp.formatDateToNeededFormat(jsonObj.optString("dt").concat("000"),DateFormat.DATE_1));index++;initMaxMin(Float.parseFloat(jsonObj.optString("profitRate")));}}/*** x轴样式设置*/XAxis xAxis = lineView.getXAxis();xAxis.setPosition(XAxisPosition.BOTTOM);// 设置x轴在底部显示xAxis.setAvoidFirstLastClipping(true);xAxis.setSpaceBetweenLabels(0); // x轴间距xAxis.setTextColor(resource.getColor(R.color.grey_low_txt));xAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd));xAxis.setDrawGridLines(true);//设置是否显示横轴表格xAxis.setGridColor(resource.getColor(R.color.color_dddddd));//设置x轴表格颜色/*** y轴样式设置*/YAxis leftAxis = lineView.getAxisLeft();leftAxis.setStartAtZero(false);leftAxis.setLabelCount(yAxislabelNum, true);  //设置Y轴Label数量leftAxis.setDrawLimitLinesBehindData(true);   leftAxis.setTextColor(resource.getColor(R.color.grey_low_txt)); //设置左侧Y轴Label颜色leftAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd)); //设置左侧Y轴颜色leftAxis.setDrawGridLines(true); //设置显示Y轴表格线leftAxis.setGridColor(resource.getColor(R.color.color_dddddd)); //设置Y轴表格线颜色leftAxis.setAxisMaxValue(yAxisMax + yAxisGap); // 设置Y轴最大值leftAxis.setAxisMinValue(yAxisMin - yAxisGap);// 设置Y轴最小值YAxis rightAxis = lineView.getAxisRight();rightAxis.setDrawLabels(false);   //设置右侧Y轴是否显示 LabelrightAxis.setDrawGridLines(false);rightAxis.setAxisLineColor(resource.getColor(R.color.color_dddddd));/*** 曲线样式设置*/LineDataSet set = new LineDataSet(yRawData, "");set.setDrawCubic(true);  //设置曲线样式为cubieset.setCubicIntensity(0.2f);//置曲线顺滑度set.setLineWidth(Util.dip2px(this, 1.0f)); //射置曲线widthset.setColor(resource.getColor(R.color.color_fd4634));//射置曲线颜色set.setCircleSize(Util.dip2px(this, 2.0f));//射置曲线上圆点大小set.setCircleColor(resource.getColor(R.color.color_fd4634));//射置曲线上圆点颜色set.setFillColor(resource.getColor(R.color.color_fd4634));//射置曲线填充颜色set.setFillAlpha(128);//射置曲线填充颜色透明度set.setDrawFilled(true);//设置曲线填冲是否启用set.setDrawValues(false);//设置是否显示点值LineData data = new LineData(xRawDatas, set);lineView.setData(data);//绑定数据到图表lineView.invalidate();LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, Util.dip2px(this, 150));contentLayout.addView(lineView, params);

学会使用这个图表框架后,效率可以大大的提高,普通的图表需求也不用在担心了。。。

android MPChart图标使用详解相关推荐

  1. Android开发图标尺寸详解

    一.开发中的实际情况(促进理解): Android开发中一个很重要的组成,就是开发者和UI设计师的配合,这关乎到APP界面部分--吸引用户的直接手段,那么在实际开发中,开发者和设计师是如何配合的呢?第 ...

  2. Android应用坐标系统全面详解

    Android应用坐标系统全面详解 原文链接:CSDN@工匠若水,http://blog.csdn.net/yanbober/article/details/50419117 1. 背景 去年有很多人 ...

  3. Android 吸入动画效果详解(仿mac退出效果)

    转载自:http://m.blog.csdn.net/blog/leehong2005/9127095 [转]Android 吸入动画效果详解 1,背景 吸入(Inhale)效果,最初我是在iOS上面 ...

  4. android hid 编程,Android Bluetooth HID完成详解,androidhid

    Android Bluetooth HID完成详解,androidhid Android Bluetooth HID落实详解 Android 关于蓝牙的局部运用的是BlueZ协定栈.然而直到眼前2.3 ...

  5. Android Bluetooth HID实现详解

    Android Bluetooth HID实现详解 Android 关于蓝牙的部分使用的是BlueZ协议栈.但是直到目前2.3.3都没有扩展HID的profile,只是实现了最基本的Handset和d ...

  6. Android 换肤方案详解(一)

    引言 在我们的开发中,也许有些项目会有换肤的需求,这个时候会比较头疼怎么做才能做到一键换肤呢?大家肯定是希望只要一行代码就能调用最好.下面我们先分析一下换肤的本质是什么? 原理 换肤,其本质无非就是更 ...

  7. Android百度地图实例详解之仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)

    Android百度地图实例详解之仿摩拜单车APP(包括附近车辆.规划路径.行驶距离.行驶轨迹记录,导航等) 标签: android百度地图行驶轨迹记录共享单车行驶距离和时间 2017-03-08 20 ...

  8. android jar 包 意见反馈功能,android重点jar包详解.docx

    android重点jar包详解 深入理解View(一):从setContentView谈起 我们都知道?MVC,在Android中,这个?V?即指View,那我们今天就来探探View的究竟.在onCr ...

  9. Android NFC开发实战详解

    Android NFC开发实战详解 Android开发实战详解NFC国内第一本AndroidNFC开发书籍带你开启AndroidNFC开发的神秘之旅大综合案例帮助读者快速进入实战角色:WiFi快速连接 ...

最新文章

  1. 你想过 Controller 这些方法里的参数是如何工作的吗?
  2. python语言必背代码-Python入门必须知道的11个知识点
  3. 从 for of 聊到 Generator
  4. 解决安装python第三方模块 '-mno-cygwin'报错的问题
  5. c# as 关键字作用
  6. Jquery----实现抽奖效果(根据姓名抽奖)
  7. Git新建临时分支进行开发后合并至master
  8. 2018-2019-2 20165114《网络对抗技术》Exp4 恶意代码分析
  9. C语言程序设计(基础)最后一次作业-- 总结报告
  10. Android开发之fragment之replace用法
  11. java 连接 sql2005,java与sql server2005 连接有关问题
  12. python人脸识别opencv_基于python+OpenCV模块的人脸识别定位技术
  13. 【hbase】HBASE的安装与配置的步骤详解
  14. PHP中的__clone()
  15. java 图片生成器_Java实现的图片生成器
  16. APC UPS 网络管理卡(型号apc ap9631)的配置
  17. [Java集合源码阅读]-ArrayList扩容机制
  18. hive与mysql的数据分区的异同
  19. 快速安装vs2015社区版
  20. Unity中location和rotation赋值和更改

热门文章

  1. 字节跳动招聘研究型实习生
  2. 【iOS小白教程】如何打包:xcodebuild和xcrun介绍
  3. 小学计算机教研教改总结,教研教改的个人心得体会
  4. 机器学习-第2关:信息熵与信息增益
  5. 市场热度最高的手机开单库存管理软件
  6. 解析搜狗音乐的音乐下载地址
  7. 用心做事,踏实做人,乐观面对,积极应对
  8. 普元mobile_普元Mobile上架AppStore被拒合集(持续更新)
  9. 2021.9.9科研日志
  10. 移动端Swiper的一些尝试(中间完整,两边有内容,循环展示)