Android图表库MPAndroidChart(一)——了解他的本质,方能得心应手
Android图表库MPAndroidChart(一)——了解他的本质,方能得心应手
我们项目中经常会遇到一些统计图,比如折线图,线形图等,在一些运动健康类的App中尤其的常见,这画起来要命,我以前就是自己手撸了这么多,但是撸完却并没有很深的感悟i,感觉,自己白撸了一样,懊恼,经常去搜索,Google也好,百度也罢,都是些标题党,什么最简单的,一招怎么怎么的,我看了半天愣是连文笔的逻辑的没看明白,主要还是排版实在是感人,本来以为现在转站系统之后接触的,应该是一大堆源码和终端,谁知道又临时调到App部门去帮忙,他们不会画图,只能我上了,画是画完了,但是为此也熬了几次夜,性能方面和View的渲染方面其实是软肋,我就在思考,有没有一劳永逸的方法,当然是使用一些第三方库,这些库都挺不错的,但是样式是固定的,当然,我们还是可以通过一些手段去尽量达到我们想要的效果,所有,我选择学习MPAndroidChart,用他来为大家讲解关于图表方面的知识,希望能尽可能的让大家明白,怎么画图才是最简单的,虽然不能涵盖所有的图表,还是我依旧会尽力的写下去,把这个系列写好,这样就不会云里雾里了
一.MPAndroidChart介绍/集成
我们按照国际惯例,肯定是根据他的文档来开始介绍对吧,唉,英文的文档,慢慢翻译,看他的项目介绍:
A powerful Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, dragging and animations.
这句话的意思是一个强大的Android图表库,支持雷达图,折线图等以及缩放拖动的动画,从这里我们可以理解为他是一个比较好的图表库并且支持动画,不然怎么这么炫呢,你说是吧,我们接着看又得到了两条有用的信息
- 1.他支持API8以上
- 2.他支持Android/IOS两个平台
再往下看,就是捐赠了,这个如果你使用十分的爽的话,可以给原作者买瓶啤酒支持下哈,我们继续看,他提供了一个apk给我们演示,并且有一个介绍的视频
这里下载地址需要FQ,当然,他的源码里也是有的,所有不用心急,到这里,再往下就是怎么反馈bug的说明,我们直接无视,继续翻,终于看到Usage的字样了,Usage使用的意思,我们现在就来看看MPAndroidChart是怎么去集成的,为此,我们要新建一个Android Studio的工程,不要问我为什么不用Eclipse,你懂的,当然,Eclipse也是可以使用的,因为他为我们提供了Jar,这里他提供了四种方式为我们添加,确实很棒,我们的选择也更多
- 1.Gradle dependency
Gradle依赖这种方式肯定最简便的,我们也是要用这一种的,他需要先在你的Project的build.gradle里添加:
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
然后在你的app的build.gradle添加
//MPAndroidChart
compile 'com.github.PhilJay:MPAndroidChart:v3.0.0'
然后sync下你的项目就好了
- 2.Maven
这个是配置仓库的,你只需要在你的repositories的pom.xml下配置
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
然后再在你的dependencies的pom.xml下配置
<dependency>
<groupId>com.github.PhilJay</groupId>
<artifactId>MPAndroidChart</artifactId>
<version>v3.0.0</version>
</dependency>
这样就大功告成了
- 3.Jar
这种方式就比较适合Eclipse了,直接下载他的Jar添加到lib里面就好了
- 4.Library
依赖库的方式,只需要下载项目中的MPChartLib然后添加到你的项目中就OK了
再往下,就是他的展示了,这个就没有什么必要讲了,想看的同学就直接去Github上看就好了,因为博客预计写很长,就不随便贴图片了,给大家一个终极预览的传送门:
二.MPAndroidChart项目结构/源码下载
当你看到这里的时候,我相信,只要你真的是认真的看完的话,那你对MPAndroidChart的文档算是比较清楚了,文档清楚之后,那就好办了,我们首先在Git中执行
git clone https://github.com/PhilJay/MPAndroidChart.git
把他的项目克隆到本地,当然,你直接Download zip也是可以的,然后你可以看到
这样的一个目录,这里面我们真正有含义的东西,就三个文件夹,哪四个呢?
- MPChartExample:官方案例,一定要看
- MPChartLib:里面是源码,也可以直接添加到项目当做依赖
- screenshots:预览,也就是我们刚刚传送门传送的地方,里面就是一些运行后的结果,如果你有想画的图表,想知道MPAndroidChart支不支持,进去看看就知道了
三.Sample项目搭建
这里我们要准备使用它,肯定要自己先搭建一个项目是吧,我们得把前期的准备工作做好了,这样大家学习起来或者下载我的Sample看起来就更加的舒爽了,对吧!那好,我们就创建一个工程——MPAndroidChartSample,然后按照上面的配置好Gradle依赖,接着,我们再写如下的几个东西
- BaseActivity
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//显示返回按钮
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//取消阴影
getSupportActionBar().setElevation(0);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//关闭当前Activity
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
}
这个BaseActivity并没有什么实际的意义,只是在actionBar上显示一个返回按钮罢了,然后我们在MainActivity的布局里面写一个GridView,然后再在类里面这样去写:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
//列表
private GridView mGridView;
//数据源
private String[] mStr = {"线形图", "折线图"};
//适配器
private ArrayAdapter<String> mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
//初始化View
private void initView() {
mGridView = (GridView) findViewById(R.id.mGridView);
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mStr);
mGridView.setAdapter(mAdapter);
//设置点击
mGridView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
//在这里跳转到对应的Activity
break;
}
}
}
到这里,我们可以看到,这个MainActivity其实也没做什么,就一个GridView,我们实现什么效果,就直接在这个数组里添加就行,然后点击事件里跳转到对应的Activity,OK,这就是前面的铺垫了,这里说一下,这个数组我们现在默认是空的哦!
四.MPChartExample解读
我们要熟悉这个框架,那么就必须去运行一下他提供的例子,这样才能最大程度的了解他的使用,对吧,那肯定我们要运行了,这里我专门开一个目录来说这个是因为我在运行过程中运到了很多问题,所有给大家说一下
1.英文
英文倒没什么,我全部都翻译过来了,别问我怎么翻译的,有道词典欢迎你,有些翻译错了没关系,大概的意思懂了就好
2.依赖
运行要导入MPChartExample以及MPChartLib,并且把MPChartLib设置让library让MPChartExample添加,但是我添加MPChartLib怎么都导入不了,无奈手动把他们调整了一下
3.Realm
这个项目什么时候多了个数据库,我又没有用过,于是再添加了几次无果之后把相关代码都删掉了,这样就没什么问题;
最后这个项目要说一下,他是Eclipse的,我演示一遍
已经整合和汉化了,我把demo上传,大家运行下自己看下:
我本来以为我可以写出一篇高质量的博客,直到我看了MPAndroidChart之后,我觉得我还是分系列来讲,这样对读者也好,对我自己也好,都是很不错的,大家看的不过瘾的话,第二篇就开始正式的讲图表了,加油哦!!
有兴趣的加群:555974449
Android图表库MPAndroidChart(一)——了解他的本质,方能得心应手的更多相关文章
- Android图表库MPAndroidChart(五)——自定义MarkerView实现选中高亮
Android图表库MPAndroidChart(五)--自定义MarkerView实现选中高亮 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...
- Android图表库MPAndroidChart(四)——条形图的绘制过程过程,隐隐约约我看到了套路
Android图表库MPAndroidChart(四)--条形图的绘制过程过程,隐隐约约我看到了套路 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库 ...
- Android图表库MPAndroidChart(三)——双重轴线形图的实现,这次就so easy了
Android图表库MPAndroidChart(三)--双重轴线形图的实现,这次就so easy了 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库 ...
- Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的
Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...
- Android图表库MPAndroidChart(十四)——在ListView种使用相同的图表
Android图表库MPAndroidChart(十四)--在ListView种使用相同的图表 各位好久不见,最近挺忙的,所有博客更新的比较少,这里今天说个比较简单的图表,那就是在ListView中使 ...
- Android图表库MPAndroidChart(十三)——简约的底部柱状图
Android图表库MPAndroidChart(十三)--简约的底部柱状图 我们继续上一讲,今天还是说下柱状图,这个图的话应该是用的比较多的,所有拿出来溜溜,先看下效果 我们还是来看下基本实现 一. ...
- Android图表库MPAndroidChart(十二)——来点不一样的,正负堆叠条形图
Android图表库MPAndroidChart(十二)--来点不一样的,正负堆叠条形图 接上篇,今天要说的,和上篇的类似,只是方向是有相反的两面,我们先看下效果 实际上这样就导致了我们的代码是比较类 ...
- Android图表库MPAndroidChart(十一)——多层级的堆叠条形图
Android图表库MPAndroidChart(十一)--多层级的堆叠条形图 事实上这个也是条形图的一种扩展,我们看下效果就知道了 是吧,他一般满足的需求就是同类数据比较了,不过目前我还真没看过哪个 ...
- Android图表库MPAndroidChart(十)——散点图的孪生兄弟气泡图
Android图表库MPAndroidChart(十)--散点图的孪生兄弟气泡图 起泡图和散点图如出一辙,但是个人认为要比散点图好看一点,我们来看下实际的演示效果 这个和散点图的实现很相似,我们一起来 ...
随机推荐
- 机器学习:scipy和sklearn中普通最小二乘法与多项式回归的使用对
相关内容连接: 机器学习:Python中如何使用最小二乘法(以下简称文一) 机器学习:形如抛物线的散点图在python和R中的非线性回归拟合方法(以下简称文二) 有些内容已经在上面两篇博文中提到了,所 ...
- 一日一练-CSS CSS中percentage百分值的使用
子曰:学好百分值,考试考百分 首先是确定CSS 中的percentage 都可以应用在CSS 中的哪些属性,以及这些属性的值如何进行计算的,参考CSS 参考手册进行统计. 定位(Positioning ...
- Kylin系列之二:原理介绍
Kylin系列之二:原理介绍 2018年4月15日 15:52 因何而生 Kylin和hive的区别 1. hive主要是离线分析平台,适用于已经有成熟的报表体系,每天只要定时运行即可. 2. Kyl ...
- Python传递参数的多种方式
Python中根据函数的输入参数以及是否有返回值可分为四种函数: 1.无参数无返回值 2.有参数无返回值 3.无参数有返回值 4.有参数无返回值 Python 中参数传递有下列五种方式; 1.位置传递 ...
- python3全栈开发-什么是粘包、粘包现象、如何解决粘包
一.粘包现象 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.decode( ...
- bzoj 5285: [Hnoi2018]寻宝游戏
Description Solution 把输入的 \(n\) 个二进制数看作一个大小为 \(n*m\) 的矩阵 把每一列压成一个二进制数,其中最高位是最下面的元素 然后就有了 \(m\) 个二进制数 ...
- Codeforces Round #402 (Div. 1)
A题卡壳了,往离线倒着加那方面想了会儿,后来才发现方向错了,二十多分钟才过掉,过了B后做D,想法好像有点问题,最后只过两题,掉分了,差一点回紫. AC:AB Rank:173 Rating:2227- ...
- bzoj 4025: 二分图
Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. 解题报告: ...
- Java面试题—初级(8)
基本表结构: student(sno,sname,sage,ssex)学生表 course(cno,cname,tno) 课程表 sc(sno,cno,score) 成绩 ...
- C++的入口函数
我们最开始学习c++时,就知道要写一个main()函数,并且知道这是整个函数的入口,但是c++不只有main()函数这一个入口. 一.对于不同的程序函数入口是不同的. main()是WINDOWS的控 ...