图表引擎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这个开源框架~~~
记录下学习的点滴,也供以后自己回过头来复习复习~~

     最后,时刻提醒自己一句话:学会去源码里找答案!~~加油!!


















posted @ 2013-12-16 22:23  IT专业户  阅读(153)  评论(0编辑  收藏  举报