在android应用技术中,图表是一个重要的环节,例如折线图、饼状图、柱状图等,MPAndroidChart作为一项开源工程(Apache License, Version 2.0 ),是一个开发中避免造轮子的工具。

github地址 :https://github.com/PhilJay/MPAndroidChart

文章结束是MPAndroidChart的demo例子

 

MPAndroidChart强大之处在于其多接口开源渲染。以下进行介绍,LineChartRenderer可以理解为折线图的渲染器,drawHighlightLines方法可以视为绘制highlightline(点击某个点出现的横线和竖线),在这个方法里面可以重写对于的绘制逻辑。同时需注意,在由于源码的限制,highlightLine无法充满布局的顶部和顶部,左边和右边,这个时候需要在drawHighlightLines函数加入以下代码即可

c.save();c.clipRect(mViewPortHandler.contentLeft(),0,mViewPortHandler.contentRight(),mViewPortHandler.contentBottom(), Region.Op.REPLACE);

MarkerView为点击图的时候,出现的标示区域布局,

public void refreshContent(Entry entry, Highlight highlight)
refreshContent用于点击不同数据点的时候,刷新标示区域的数据。


XAxisRenderer函数为X轴的渲染,这里可以控制X轴的显示

protected void drawLabels(Canvas c, float pos, PointF anchor) {
drawLabels方法用于绘制坐标文字的方法,

public void renderGridLines(Canvas c) {
renderGridLines用于绘制x轴的对应格子线。重写这里的方法可以控制绘制的策略。


YAxisValueFormatter类为Y轴数据格式化类,在这里可以根据需求通过getFormattedValue方法更改显示的Y轴文案,非必要情况下,别在YAxisRenderer类中格式化Y轴显示的数据。

YAxisRenderer类与XAxisRenderer类的功能类似,通过drawYLabels方法控制绘制Y轴文案的操作,通过renderGridLines来绘制y轴格子线的操作。

OnChartGestureListener监听器用于图表手势的监听器,

public interface OnChartGestureListener {    void onChartGestureStart(MotionEvent var1, ChartGesture var2);    void onChartGestureEnd(MotionEvent var1, ChartGesture var2);    void onChartLongPressed(MotionEvent var1);    void onChartDoubleTapped(MotionEvent var1);    void onChartSingleTapped(MotionEvent var1);    void onChartFling(MotionEvent var1, MotionEvent var2, float var3, float var4);    void onChartScale(MotionEvent var1, float var2, float var3);    void onChartTranslate(MotionEvent var1, float var2, float var3);}

这里可以监听许多手势的操作。

BarLineChartTouchListener类就是Touch的监听器,用于获取Touch事件的操作,这里也调用OnChartGestureListener的方法用于传递当前的操作。


以下是LineChart常用的方法

setDescription 描述的文案

setDescriptionColor 描述文案的颜色

setDescriptionPosition 描述文案的位置


setTouchEnabled是否开启触摸操作

setDragEnabled是否开启拖拽操作

setScaleEnabled 是否开启放大缩小操作

highlightValue 高亮某个点 其中highlightValue(-1, -1)不高亮任何点

setRenderer 设置渲染器

setOnTouchListener、setOnChartGestureListener设置监听事件等


同时许多数据也是可以设置属性的,例如XAxis可以设置x轴的数据

例如 XAxis xAxis = mChart.getXAxis();
        xAxis.setTextSize设置文字大小
        xAxis.setTextColor 设置文字颜色

xAxis.setDrawAxisLine(); 是否画X轴线
        xAxis.setDrawLabels();是否画x轴文字等等等

LineDataSet作为一个数据集合,可以设置点对应的属性例如

LineDataSet dataSet1 = new LineDataSet(mCharNodeData1, null);
        dataSet1.setColor(Color.parseColor("#eeeeee"));// 画线的颜色
        dataSet1.setLineWidth(1f); 线的宽度
        dataSet1.setDrawFilled(true);// 画阴影部分
        dataSet1.setFillColor(Color.parseColor("#eeeeee"));是否画下面的阴影
        dataSet1.setAxisDependency(YAxis.AxisDependency.LEFT);相对于哪个y轴

      dataSet1.setDrawCircles(false); 是否画圆
        dataSet1.setDrawCircleHole(true); 是否画圆的中间
        dataSet1.setCircleColorHole(Color.WHITE); 中间的颜色
        dataSet1.setCircleSize(5f); 圆的大小
        dataSet1.setHighlightEnabled(true); 是否画高亮线
        dataSet1.setDrawHorizontalHighlightIndicator(false);//画高亮线的横线
        dataSet1.setDrawVerticalHighlightIndicator(true);/;//画高亮线的竖线


以下是图表工具的demo效果



  • LineChart (with legend, simple design) 
  • LineChart (with legend, simple design) 

  • LineChart (cubic lines) 

  • LineChart (gradient fill) 

  • Combined-Chart (bar- and linechart in this case) 

  • BarChart (with legend, simple design)

  • BarChart (grouped DataSets)

  • Horizontal-BarChart

  • PieChart (with selection, ...)

  • ScatterChart (with squares, triangles, circles, ... and more)

  • CandleStickChart (for financial data)

  • BubbleChart (area covered by bubbles indicates the yValue)

  • RadarChart (spider web chart)



更多相关文章

  1. 《你知道android的MessageQueue.IdleHandler吗?》
  2. 安卓按钮有按下去的效果的实现方法
  3. Android(安卓)7.1 设置不支持遥控操作?
  4. RxJava 官方文档中文翻译
  5. Android(安卓)4.0 新增的显示数据集的桌面控件
  6. Android自定义控件实战——滚动选择器PickerView
  7. Activity类的runOnUiThread方法
  8. 【Android】解决Fragment多层嵌套时onActivityResult无法正确回
  9. android使用html标签

随机推荐

  1. Android逐帧动画的简单使用-语音播放效果
  2. Android(安卓)App卡顿慢优化之多线程优化
  3. Kotlin Hello World
  4. Android image的示例 拍照显示
  5. 自己动手写一个简单的Android下拉刷新
  6. Android跨进程通信之小例子(一)
  7. android UI进阶之仿iphone的tab效果 (Andr
  8. Mono for Android(安卓)(1) 之布局
  9. android应用安全——签名机制
  10. Unity3D调用android方法(非插件方式)