AChartEngine (一) 事件处理 添加坐标/标签 点击效果
由于项目需要,需要对图表中的label设置点击事件,可是google给的包没有实现这功能。看来得靠自己了!
慢慢看源码吧~
关于AChartEnging的事件,使用这个组件时大致有一下几个设置:?
... clickableAreas = new HashMap<Integer, List<ClickableArea>>(); //sLength = series.size();遍历几条线 for (int i = 0; i < sLength; i++) {... //遍历线中的每个点 for (Entry<Double, Double> value : range.entrySet()) { ... values.add(value.getKey()); values.add(value.getValue()); //把坐标值转换成屏幕中像素坐标 if (!isNullValue(yValue)) { points.add((float) (left + xPixelsPerUnit[scale] * (xValue - minX[scale]))); points.add((float) (bottom - yPixelsPerUnit[scale] * (yValue - minY[scale]))); ... //关键的来了,生成点击区域 ClickableArea[] clickableAreasForSubSeries = clickableAreasForPoints( MathHelper.getFloats(points), MathHelper.getDoubles(values), yAxisValue, i, startIndex); ... } clickableAreas.put(i, clickableArea); //clickableAreas是一个域,保存所有可点击系列}}??
查看上面clickableAreasForPoints方法,发现其实就是在坐标像素点处建一个变长为render.getSelectableBuffer()的矩形。
由此很容易想到解决方案:
?
?
在x轴标签处创建相应的可点击矩形,添加到clickableAreas中即可?
这样解决的方法就有很多了,比较简单的方法就是在y轴最小值下面添加一项。。。。。(由于我的图标不用提供缩放和移动,并且最小值固定为0),只要 vYalues = -5d,添加一项即可。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?