前言
记得之前介绍过关于MPAndroidChart的使用方法,但是长江后浪推前浪,最近github有出了一个新的开源曲线库,hellocharts,个人觉得这个库比MPAndroidChart更加酷炫,下面就介绍下它的一些使用方法
github地址:https://github.com/lecho/hellocharts-android
使用方法(同样以曲线为例,其他类似)
xml
<lecho.lib.hellocharts.view.LineChartView android:id="@+id/linechart" android:layout_width="match_parent" android:layout_height="wrap_content"/>
code
LineChartView chart = new LineChartView(context); layout.addView(chart);
data
List<PointValue> values = new ArrayList<PointValue>(); values.add(new PointValue(x,y)); ... Line line = new Line(values); List<Line> lines = new ArrayList<Line>(); lines.add(line);//可以有多条曲线 LineChartData data = new LineChartData(); data.setLines(lines); chart.setLineChartData(data);
hellocharts和MPAndroidChart的比较
曲线的样式
在这一点上,MPAndroidChart比hellocharts要好,MPAndroidChart对曲线的样式非常的详细,包括曲线的颜色,粗细、样式(实线、虚线),曲线上点的颜色、粗细、形状,选中的点的图例(类似地图的标注,还可以自定义布局样式)、单位,整个图标的图例(每条曲线的颜色,标题等信息),曲线的上下限标识,x轴,Y轴的字体颜色,大小,字体样式等
特别说明:
hellocharts在曲线的颜色,点的颜色,还有点的背景颜色默认是保持一致的,没法配置,这个比较伤脑筋,
MPAndroidChart不能在
set.setCubic(true)
模式下支持自定义setFillColor()
;如果说对这些要求比较高的就要慎重选择了
动画
MPAndroidChart更方便一点,它支持三种动画
animateX(int durationMillis):
animateY(int durationMillis):
animateXY(int xDuration, int yDuration):
hellocharts也可以自定义动画的
chartTop.setAnimation();
缩放
hellocharts更加灵活,它可以设置图标的缩放方向,而MPAndroidChart不能单独指定
chartTop.setZoomType(ZoomType.HORIZONTAL);
//ZoomType:HORIZONTAL、VERTICAL、HORIZONTAL_AND_VERTICAL
分页展示与滑动
两个库在这个方面的表现差异很大,hellocharts的体验优势很大,下面我们详细说说这个
单屏
MPAndroidChart默认是将所有的点都展示在一个屏幕上,这样一来,点少还可以,一旦点特别多的时候,展示就很难看,根本看不清楚点的x,y值,必须手动去缩放才能看清,很麻烦,图标展示就没有了意义.有人说,是不是可以通过通过设置曲线默认的缩放比例
mChart.setScaleMinima();
来达到分页展示的目的,事实上是可以的,但是效果很不好,很容易又恢复单屏显示滑动不流畅
MPAndroidChart的滑动是没有惯性的,只能手指贴面滑,体验很不好
有时候要展示的数据比较多,以上两个限制对用户的体验式致命的,还好,hellocharts解决了这两个问题,怎么解决的呢?
在hellocharts中引入了一个Viewport的东西,作者的解释是:
**The viewport is represented by the coordinates of its 4 edges (left, top, right- bottom). These fields can be accessed directly. Use width() and height() to retrieve the viewport’s width and height.**
我的理解,Viewport就是一个视图的概念,这个视图有上下左右四个边,好比一张全国地图,我们只想看某个省份的地图,所以我们只需要拿到某个省份的上下左右边界,然后展示出来就可以了,他就是全国地图中的一个子集
public Viewport(float left, float top, float right, float bottom)
hellocharts有两个方法
chartTop.setMaximumViewport(Viewport maxViewport)//所有的视图
chartTop.setCurrentViewport(Viewport targetViewport);//当前要展示的视图
我们需要拿到左右数据的最大视图范围和当前要展示的视图范围,调用上面两个方法,即可完成数据的分页展示,关键是这个曲线库的滑动非常流程,体验非常赞
综上,如果大家要展示的数据比较少,对曲线样式,动画要求很高的可以选择MPAndroidChart,反之就选择hellocharts吧,当然具体情况还得自己斟酌,
ps:两个库的作者对项目维护活跃的都很高,MPAndroidChart最近也提供了gradle依赖,使用android studio的同学用起来更方便了 ,具体更新请随时关注github.
hellocharts:https://github.com/lecho/hellocharts-android
MPAndroidChart:https://github.com/PhilJay/MPAndroidChart