图表引擎AChartEngine 二
这几天项目涉及到android图表绘制,网上找的Demo都是大同小异,也就如上篇博文所写的一样是基本函数的实现。可是所有能找到的Demo都和设计图不符。木有办法,Leader发话啦,万不得已的情况下不能改设计图,顾客是上帝嘛。
AChartEngine这个开源框架已经做得非常不错了,可是在我几乎试完所有渲染效果都答不到自己预期的时候。那就只能——改源码咯!再此不得不佩服带我的师傅啊,大牛啊!再次也表达下对师傅的感激!
现目前用的是achartengine 1.1.0,为了满足特定需求,把achartengine源码的某些方法坐了修改,生成了自己的jar包。
1.重新修改了圆点的方法,自带的setfillPoint(false)中间会留有线。
2.隐藏了Y轴值,但是显示出了网格。(腾讯手机管家流量监控的图也是木有显示Y轴但是有背景网格)
3.给视图设置了显示范围。
public XYSeriesRenderer setXYSeriesRender(){//点线的渲染,返回 点线渲染 对象 XYSeriesRenderer pointRender=new XYSeriesRenderer(); pointRender.setPointStyle(PointStyle.CIRCLE); pointRender.setFillPoints(false); pointRender.setLineWidth(2f); pointRender.setColor(Color.rgb(64,100 , 32)); pointRender.setDisplayChartValues(true); pointRender.setChartValuesTextSize(25); pointRender.setShowLegendItem(true); pointRender.setDisplayChartValuesDistance(30); pointRender.setChartValuesTextAlign(Align.CENTER); pointRender.setChartValuesSpacing(12f); return pointRender; } public void setXYMultipleSeriesRenderer(XYSeriesRenderer pointRender,int number ){//坐标轴图形整体渲染。传入的参数是 点线渲染 对象 multiRenderer.setChartTitle(chartName);//设置图表标题 multiRenderer.setYLabels(6); multiRenderer.setXLabels(0); setXLabels(xLabels); multiRenderer.setShowGrid(true);//显示网格 multiRenderer.setPointSize(3f);//设置点的大小 ! multiRenderer.setChartTitleTextSize(20);//设置图表标题文字的大小 multiRenderer.setLabelsTextSize(20);//设置标签的文字大小 multiRenderer.setXLabelsAlign(Align.CENTER);//刻度线与刻度标注之间的相对位置关系 multiRenderer.setPanEnabled(true, false);//允许左右拖动,但不允许上下拖动. multiRenderer.setZoomEnabled(true);//设置允许放大缩小. multiRenderer.setShowLegend(false);//不显示图例 multiRenderer.setYLabelsPadding(100f);//这样就看不到y坐标的值了 // 这个会限制Y值,因为我只需要X限制位置,下面搞定! //multiRenderer.setXAxisMin(0d);//不过限制下Y其实也不错~!! // multiRenderer.setXAxisMax(5d); multiRenderer.setShowCustomTextGrid(true);//可以显示竖条了! multiRenderer.setXLabelsColor(Color.rgb(64,100 , 32)); //设置整体渲染中图表区域内背景色 multiRenderer.setApplyBackgroundColor(true); multiRenderer.setBackgroundColor(Color.WHITE ); multiRenderer.setMarginsColor(Color.WHITE); switch(number){ case 0: multiRenderer.setRange(new double[]{0d, 5d, 30d,200d }); break;
ResultActivity.java
public void initGraphicalView(int number) { String[] xlab = new String[] { "星期一", "星期二", "星期三", "星期四" }; switch (number) { case 0: value = new int[] { 70, 80, 70, 65 }; int[] valueh=new int[]{150,130,120,150}; chartDrawing = new ChartDrawing("收入/支出" , "日期", "数值",xlab); chartDrawing.setXYSeries(value, "线一条线" ); chartDrawing.setXYMultipleSeriesRenderer(chartDrawing.setXYSeriesRender(), number); chartDrawing .setXYSeries(valueh, "第二条线" ); chartDrawing .setXYMultipleSeriesRenderer(chartDrawing.setXYSeriesRender(), number); lView = ChartFactory.getLineChartView(context,chartDrawing.multiDate, chartDrawing.multiRenderer); layout0.addView(lView); break;
如果想要下面这种效果,就按如下设置,就X轴默认,控制Y轴范围。
switch(number){ case 0: // multiRenderer.setRange(new double[]{1d, 5d, 30d,200d }); multiRenderer.setYAxisMin(50d); //不限制X,即默认的x样子,限制Y的范围就OK啦 multiRenderer.setYAxisMax(100d); break;好啦,等项目忙完咯俺要来好好的学学AChartEngine这个开源框架~~~
记录下学习的点滴,也供以后自己回过头来复习复习~~
最后,时刻提醒自己一句话:学会去源码里找答案!~~加油!!