最近用了一下achartengine的饼图感觉很好,但是总感觉有些自己DIY一下会不会更好,当然美观和执行效率会不好,也没用去看achartengine源码随便写了个半成品,需要改进的地方还有很多比如各种图释(感觉图释的话找准位置drawText就可以),传入的数据集也没有进行优化,暂时使用list,还有响应的事件只实现了点击选择,没有实现滑动选择,大体就这样吧。下面说一下我的理解和我自己的问题。
1.画扇形我是用canvas.drawArc,注意几个参数第一个是RectF它是指扇形所在圆的外围矩形,第二个参数是起始角度,是从右顺时针旋转的,第三个参数是旋转角度,每一个扇形的角度范围是起始角度到起始角度加旋转角度。
2.点击事件,在判断落在哪个扇形区域的时候获取点(用event.getX别用event.getRawX以前没注意过区别)先判断是否在圆内,再看角度在哪个扇形的角度范围内。算角度时我用arctan()算出角度再根据每个象限对算出来的角度进行处理(不知道处理逻辑对不对 反正我自己试着点是没问题了)。
3.监听事件我声明了一个PieSelectedListener接口,我这里有个问题时每次界面刷新的时候来调用接口方法感觉会慢一些,不知道对不对。
4.感觉achartengine在做时用工厂模式可能里面还有装饰者模式确实合理,在进行一下封装,我自己写的这里需要先定义pieRender(整个扇形图的选项)再定义数据pielist,而achartengine直接ChartFactory .getPieChartView(context, categorySeries, renderer)。还有很长度路走。。
附上源码 http://download.csdn.net/detail/popezong/8664407