第二章 画图

比achartengine更加强大的图表控件。


核心功能:

  • 支持x,y轴缩放

  • 支持拖拽

  • 支持手指滑动

  • 支持高亮显示

  • 支持保存图表到文件中

  • 支持从文件(txt)中读取数据

  • 预先定义颜色模板

  • 自动生成标注

  • 支持自定义x,y轴的显示标签

  • 支持x,y轴动画

  • 支持x,y轴设置最大值和附加信息

  • 支持自定义字体,颜色,背景,手势,虚线等


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

也可以直接下载jar包:https://github.com/PhilJay/MPAndroidChart/releases

另外,需要NineOldAndroids支持:https://github.com/JakeWharton/NineOldAndroids

可直接下载jar包:

nineoldandroids-2.4.0.jar


效果图:

支持的图标类型:

  • LineChart (线性图)

  •  

  • LineChart (线性图)

  •  



  • PieChart (饼图)


  • ScatterChart (散列图)


  • CandleStickChart (K线图、蜡烛图)


  • BubbleChart (气泡图)


  • RadarChart (网图)



如何使用

以曲线图(LineChart)为例

1, 创建图表实例

1. <com.github.mikephil.charting.charts.LineChart
2. android:id="@+id/lineChart"
3. android:layout_width="match_parent"
4. android:layout_height="300dp"/>

或者:

1. LineChart chart = new LineChart(Context);


2. 设置参数

1. lineChart = (LineChart)this.findViewById(R.id.lineChart);
2. //lineChart.setBackgroundColor(0xFF6BF3AD);//设置图表背景
3. lineChart.setDrawGridBackground(false); //取消网格背景色
4. ...

整个LineChart控件分为图表背景色、网格背景色,二者可单独设置。


3. 设置数据Data

1. setData(12100);
01. /**
02. * 生成数据
03. * @param count
04. * @param range
05. * @return
06. */
07. private void setData(int count, float range) {
08.  
09. ArrayList<String> xVals = new ArrayList<String>();
10. for (int i = 0; i < count; i++) {
11. xVals.add((i+1) + "月");
12. }
13.  
14. ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>();
15. dataSets.add(createLineDataSet(count, range, "小米"0xFFFFF78E));
16. dataSets.add(createLineDataSet(count, range, "华为"0xFFC1FF8D));
17. LineData data = new LineData(xVals, dataSets);
18.  
19. // set data
20. lineChart.setData(data);
21. }
22. /**
23. * 生成曲线数据
24. */
25. private LineDataSet createLineDataSet(int count, float range, String label, int color){
26. ArrayList<Entry> yVals = new ArrayList<Entry>();
27. for (int i = 0; i < count; i++) {
28. float mult = (range + 1);
29. float val = (float) (Math.random() * mult) + 3;
30. yVals.add(new Entry(val, i));
31. }
32. LineDataSet lineDataSet = new LineDataSet(yVals, label);
33. lineDataSet.setColor(color);
34. return lineDataSet;
35. }

对于曲线来说,在一张图表上可以显示多条曲线,每条曲线都是一个LineDataSet实例,并且可单独设置样式。

ArrayList<LineDataSet> dataSets :  创建曲线集合。

将所有曲线数据封装成LineData, 如 LineData data = new LineData(xVals, dataSets);

最终lineChart.setData(data);



主要的Api方法:

  • setDescription(String desc): 设置表格的描述

  • setDescriptionTypeface(Typeface t):自定义表格中显示的字体

  • setDrawYValues(boolean enabled): 设置是否显示y轴的值的数据

  • setValuePaintColor(int color):设置表格中y轴的值的颜色,但是必须设置setDrawYValues(true)

  • setValueTypeface(Typeface t):设置字体

  • setValueFormatter(DecimalFormat format): 设置显示的格式

  • setPaint(Paint p, int which): 自定义笔刷

  • public ChartData getDataCurrent():返回ChartData对象当前显示的图表。它包含了所有信息的显示值最小和最大值等

  • public float getYChartMin(): 返回当前最小值

  • public float getYChartMax(): 返回当前最大值

  • public float getAverage(): 返回所有值的平均值。

  • public float getAverage(int type): 返回平均值

  • public PointF getCenter(): 返回中间点

  • public Paint getPaint(int which): 得到笔刷

  • setTouchEnabled(boolean enabled): 设置是否可以触摸,如为false,则不能拖动,缩放等

  • setDragScaleEnabled(boolean enabled): 设置是否可以拖拽,缩放

  • setOnChartValueSelectedListener(OnChartValueSelectedListener l): 设置表格上的点,被点击的时候,的回调函数

  • setHighlightEnabled(boolean enabled): 设置点击value的时候,是否高亮显示

  • public void highlightValues(Highlight[] highs): 设置高亮显示

  • saveToGallery(String title): 保存图表到图库中

  • saveToPath(String title, String pathOnSD): 保存.

  • setScaleMinima(float x, float y): 设置最小的缩放

  • centerViewPort(int xIndex, float val): 设置视口

  • fitScreen(): 适应屏幕

动画:

所有的图表类型都支持下面三种动画,分别是x方向,y方向,xy方向。

  • animateX(int durationMillis): x轴方向

  • animateY(int durationMillis): y轴方向

  • animateXY(int xDuration, int yDuration): xy轴方向

注意:如果调用动画方法后,就没有必要调用invalidate()方法,来刷新界面了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值