hellocharts与MPAndroidChart的比较

前言

记得之前介绍过关于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轴的字体颜色,大小,字体样式等

特别说明:

  1. hellocharts在曲线的颜色,点的颜色,还有点的背景颜色默认是保持一致的,没法配置,这个比较伤脑筋,

  2. 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的体验优势很大,下面我们详细说说这个

  1. 单屏

    MPAndroidChart默认是将所有的点都展示在一个屏幕上,这样一来,点少还可以,一旦点特别多的时候,展示就很难看,根本看不清楚点的x,y值,必须手动去缩放才能看清,很麻烦,图标展示就没有了意义.有人说,是不是可以通过通过设置曲线默认的缩放比例mChart.setScaleMinima();来达到分页展示的目的,事实上是可以的,但是效果很不好,很容易又恢复单屏显示

  2. 滑动不流畅

    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