一.概述

    MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。MPAndroidChart同样拥有常用的图表类型:线型图、饼图、柱状图和散点图。

GitHub地址:

https://github.com/PhilJay/MPAndroidChart


二.实例讲解

下面先以BarChart为例讲解一下在Chart类的基础上,开发者为BarChart准备的实例化好的组成部分。

经过前两篇文章的分析,我们知道一个基本的Chart实例应该是是有这么几部分组成的:

(1)DataRenderer(数据渲染器)

(2)Legend(图例)

(3)Axis(坐标轴)

(4)Listener(一开始我们分析,Chart类的监听器有两个,但是经过源码分析,我们得知Chart的基本监听器有三个)

(5)Animator:动画显示 (6)Data:图表数据(根源的数据怎么能忘记呢)
(7)MarkerView (8)HighLighter(高亮覆盖显示) (9)ViewPortHandler(暂时理解为绘图区域) 下面呢,我将以BarChart为例讲解Chart的这些基本组成部分都是怎么被具像化,怎么样工作的: 今天我们把剩下的部分讲解一下,主要有监听器和动画这两个部分。
首先是动画部分,在此图表库中的动画是以属性动画为基础的,动画类主要提供了在X轴和Y轴上以及同时在XY轴上运动的平移和缩放动画
public void animateXY(int durationMillisX, int durationMillisY, EasingFunction easingX,        EasingFunction easingY) {}public void animateX(int durationMillis, EasingFunction easing) {}public void animateY(int durationMillis, EasingFunction easing) {}public void animateXY(int durationMillisX, int durationMillisY, Easing.EasingOption easingX,        Easing.EasingOption easingY) {}public void animateX(int durationMillis, Easing.EasingOption easing) {}public void animateY(int durationMillis, Easing.EasingOption easing) {}public void animateXY(int durationMillisX, int durationMillisY) {}public void animateX(int durationMillis) {}public void animateY(int durationMillis) {}
然后再讲一下监听器,在图表库中的监听器主要有三个:
/** * Gesture listener for custom callbacks when making gestures on the chart. */private OnChartGestureListener mGestureListener;
/** * listener that is called when a value on the chart is selected */protected OnChartValueSelectedListener mSelectionListener;protected ChartTouchListener mChartTouchListener;

public void highlightValue(Highlight high, boolean callListener) {    Entry e = null;    if (high == null)        mIndicesToHighlight = null;    else {        if (mLogEnabled)            Log.i(LOG_TAG, "Highlighted: " + high.toString());        e = mData.getEntryForHighlight(high);        if (e == null) {            mIndicesToHighlight = null;            high = null;        } else {            if (this instanceof BarLineChartBase                    && ((BarLineChartBase)this).isHighlightFullBarEnabled())                high = new Highlight(high.getXIndex(), Float.NaN, -1, -1, -1);            // set the indices to highlight            mIndicesToHighlight = new Highlight[]{                    high            };        }    }    if (callListener && mSelectionListener != null) {        if (!valuesToHighlight())            mSelectionListener.onNothingSelected();        else {            // 当使用到highValue时,在此处通知监听器触发            mSelectionListener.onValueSelected(e, high.getDataSetIndex(), high);        }    }    // redraw the chart    invalidate();}
public void highlightValues(Highlight[] highs) {    // set the indices to highlight    mIndicesToHighlight = highs;    if (highs == null || highs.length <= 0 || highs[0] == null) {        mChartTouchListener.setLastHighlighted(null);    } else {//当使用到highValues时,通知 mChartTouchListener触发        mChartTouchListener.setLastHighlighted(highs[0]);    }    // redraw the chart    invalidate();}

这三个监听器声明在Chart基类中的,我们想要执行我们自定义的监听器就需要在Chart类及其子类的实例对象中初始化一个新的监听器然后传入到Chart内部完成监听器工作。我们可以在监听器中得到位置和该位置上的实体等信息
源码分析到着已经将所有的基础部分全部分析完毕,接下来的博客将介绍自己的自定义方法,敬请期待:::::

更多相关文章

  1. android 补间动画的实现
  2. ANDROID开机动画分析
  3. Android Animations动画使用详解
  4. Android 一般动画Animation和属性动画Animator

随机推荐

  1. Unity 实现简单的语音聊天 [Android版本]
  2. android安卓源码海量项目合集打包-1
  3. Android常用控件(一)
  4. [译]Android内存管理: 理解App的PSS
  5. QT 与 android java socket通讯 中文字符
  6. Android 网络框架 android-async-http
  7. Android体系结构-架构
  8. 【Android】开机自启动
  9. android 自定义键盘 KeyboardView的key
  10. 专访罗升阳:老罗的Android之旅