AndroidMPChart是一款android图表库,它支持线性图,柱子图,蜡烛图和扇形图
前段时间项目用到了AndroidMPChart来画股票图,遇到了一些问题分享下。
分时图:
我们在画分时图要和市面上的分时图很类似,而原始的mp框架无法满足我们的需求,则需要修改源码了。
我们看下下面这个分时图来怎么实现
我们分析下这个图怎么用mp来画
1.外层有个边框这个mp支持的不需要我们再去修改
2.有三条横向的虚线,mp里也是支持的叫做警戒线(这个类LimitLine)
2》LimitLine这个类它是画警戒线的
如果我们要在LeftY添加警戒线则是这样的
//第二个参数设置描述则就会显示在左侧的值
LimitLine limitLineMax=new LimitLine("警戒线值",“警戒线描述”);
//是否设置虚线显示
limitLineMax.enableDashedLine(“线的长度”, “间隔”, “偏移量”);
//警戒线右侧显示值
第一步:我们在LimitLine类中定义这个变量并实现set/get方法
第二步:在YAxisRenderer类中的renderLimitLines这个方法里添加
第三步:还是在这个方法内找到画标签的方法里添加画右标签
注意这里需要判断警戒线的位置我用的LEFT_TOP,LEFT_BOTTOM左上和左下
设置完成就OK啦,我们回到警戒线里
//设置右边标签值
limitLineMax.setmRightLabel(“右边标签值”);
//设置标签显示在警戒线下方
limitLineMax.setLabelPosition(LimitLine.LimitLabelPosition.LEFT_BOTTOM);
//添加警戒线,3条虚线一样的添加
axisLeft.addLimitLine(limitLine);
3.画x轴的标签
原始mp的x轴标签都会超过最左边和最右边边距,要实现上面的那种效果我们需要设置
xAxis.setAvoidFirstLastClipping(true);
设置这个方法之后最右边的还是有问题我们需要修改源码
4.画线的阴影填充背景渐变
在Drawable中定义一个渐变色的xml
set.setFillDrawable("获取你定义的xml");
//开启填充
set.setDrawFilled(true);
5.我们在画分手图的时候会有动态画分时图的需求,就是当数据推送一个点的时候画一个点,而不是清空图表从9点30从新画。我们知道股票图一分钟画一个点(共242个点)而一分钟之内则会推送好几个点而取的是这个分钟的最后一个点。我们要的效果就是在这一分钟中推送过来的上下波动到这一分钟完了再去画这个点
//实现在一分钟之内上下波动
1.先获取chartData,
2.然后再根据chartdata获取相应的dataset(每一个set代表一条线)
3.获取当前set的最后一个点索引
4.根据当前set的最后一个索引获取Entry
5.设置Y值
entryForIndex.setY(“推送的Y值”)
6.通知图表刷新数据
//动态添加数据
1,2,3,跟实现在一分钟之内上下波动一样
4.添加到最后一个索引里
dataSetByIndex.addEntry(indexLast,“添加到值”)
5.刷新数据并将图表移动到指定位置
mLineChart.moveViewTo(indexLast,"值",YAxis.AxisDependency.LEFT)
到这里就可以画出上面的图了及动态添加分时图,下篇文章我说说怎么画高亮线。
有问题麻烦提出交流共同学习。