最近工作中需要开发 stock 的分时线, 用到了 achartengine 开源画图软件。
先来看看最终效果
用过 achartengine 的都会发现TimeChart 有BUG,它的x轴 的时间 间距会不一致,你在折线图上的点和实际的
x轴时间 有时会对不起来, 解决的办法就是设置startIndex =9:30 的位置
另一个BUG 就是 TimeChart 的x轴 时间 连续性 ,11:30~13:00 这段时间的数据为空,会形成 下面的效果:
(这样的效果 很明显不是很美观,其实做为程序猿,觉得还不错啊,多有逻辑感,呵呵)
怎么样去修改呢,有两种思路,计算 11:30~13:00多长距离 ,修改AbstractChart 的 drawPath方法,
1 | float spaceNum = Math.abs(tempDrawPoints[ 0 ] - tempDrawPoints[ 2 ]); |
判断spaceNum 是否大于180(正常每分钟的距离 为2 ,那11:30~13:00时间差为1.5h ,90m*2=180的距离)
不过这种方法涉及的东西比较多,在此不做讨论……(= =~希望有对此做研究的大家一起讨论下)
另一种方法,就是 在返回的x轴数据上判断 x轴时间是否大于13:00 ,如果大于就减去1.5h ,具体代码如下( 修改TimeChart 的drawXLabels方法)
02 | paint.setColor(mRenderer.getXLabelsColor()); |
03 | canvas.drawLine(xLabel - gap, bottom, xLabel - gap, bottom |
04 | + mRenderer.getLabelsTextSize() / 3 , paint); |
05 | if (label < (Math.round(xLabels.get( 0 )) + TimeChart.HOURS * 2 )) { |
06 | drawText(canvas, format.format( new Date(label)), xLabel |
07 | - gap, bottom + mRenderer.getLabelsTextSize() |
08 | * 4 / 3 + mRenderer.getXLabelsPadding(), paint, |
09 | mRenderer.getXLabelsAngle()); |
10 | } else if (label == (Math.round(xLabels.get( 0 )) + TimeChart.HOURS * 2 )) { |
11 | drawText(canvas, "11:30/13:00" , xLabel - gap, bottom |
12 | + mRenderer.getLabelsTextSize() * 4 / 3 |
13 | + mRenderer.getXLabelsPadding(), paint, |
14 | mRenderer.getXLabelsAngle()); |
16 | drawText(canvas, format.format( new Date( |
17 | ( long ) (label + TimeChart.HOURS * 1.5 ))), |
19 | bottom + mRenderer.getLabelsTextSize() * 4 / 3 |
20 | + mRenderer.getXLabelsPadding(), paint, |
21 | mRenderer.getXLabelsAngle()); |