运用开源 achartengine 绘制android端的折线图片,多表显示

有很多种实现的方法,我就把我写的一个例子直接拿出来吧= ,嘿嘿其实也是当时参考别人的(自己的图。多点的是上半部分的,下面的那个是跟X轴对应点数的


import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.view.View;

public class WS_zhexian extends AbstractDemoChart {

	public String getName() {
		return "TestAChart";
	}

	public String getDesc() {
		return "Test";
	}

	public GraphicalView CreateView(Context context){
		String[] titles = new String[] { "COD达标率 ", "氨氮达标率"};
		// x轴的值
		List<double[]> x = new ArrayList<double[]>();
		for (int i = 0; i < titles.length; i++) {
			x.add(new double[] {1,2,3,4,5,6,7,8,9});   //从X周的 0算起来 总共有几个点
		}
		// y轴的值
		List<double[]> values = new ArrayList<double[]>();
		
		values.add(new double[] { 10.3, 12.5, 13.8, 24.5, 30.4, 40.4, 50.4, 55.5, 60.6});
		values.add(new double[] { 10, 15.6, 20.5, 18.6, 25.7, 30.6, 44.5, 55.5 ,64.8});
		
		int[] colors = new int[] { Color.BLUE, Color.GREEN};
		PointStyle[] styles = new PointStyle[] { PointStyle.POINT,PointStyle.POINT };
		
		XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
		int length = renderer.getSeriesRendererCount();
		for (int i = 0; i < length; i++) {
			((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
		}
		renderer.setBackgroundColor(Color.WHITE);
		renderer.setApplyBackgroundColor(true);
		renderer.setFitLegend(true);
		// 图表与屏幕四边的间距颜色
		renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3));
		renderer.setChartTitleTextSize(30);
		renderer.setAxisTitleTextSize(10);
		// renderer.setLegendHeight(50);
		renderer.setLegendTextSize(10);                    // 图例文字的大小--下面分类的字体大小
		renderer.setMargins(new int[] { 50, 50, 20, 30 }); // 图离上做下右的间距,貌似没用
		// x、y轴上刻度颜色
		renderer.setXLabelsColor(Color.BLACK);
		renderer.setYLabelsColor(0, Color.BLACK);

		setChartSettings(renderer, "", "","", 1, 9 , 0, 90, Color.BLACK, Color.BLACK);
		
		// 轴上数字的数量
		renderer.setXLabels(0);
		renderer.setYLabels(9);
		
		/**
		 *  本项目 -  传入 第一个点 为 X轴的0坐标 为上一天的点数,所以不能为0 ,    第2个点位当天点数
		 */
		    renderer.addXTextLabel(2, "6月1号");
		    renderer.addXTextLabel(3, "6月2号");
		    renderer.addXTextLabel(4, "6月3号");
		    renderer.addXTextLabel(5, "6月4号");
		    renderer.addXTextLabel(6, "6月5号");
		    renderer.addXTextLabel(7, "6月6号");
		    renderer.addXTextLabel(8, "6月7号");
		    renderer.addXTextLabel(9, "6月8号");
		
		    renderer.setShowGrid(true);    // 是否显示网格
		    renderer.setXLabelsAlign( Align.RIGHT);
	    	    renderer.setYLabelsAlign(Align.RIGHT);

		 renderer.setPanEnabled(false);   //图表是否可以移动
	         renderer.setZoomEnabled(true);   //图表是否可以缩放
	         renderer.setLegendHeight(100);   // 图标文字距离底边的高度
	        renderer.setZoomButtonsVisible(false);   // 设置放大缩小按钮是否可见
		GraphicalView view= ChartFactory.getLineChartView(context, buildDataset(titles, x, values), renderer);
		return view;  //返回View对象
	}
	
	@Override
	public Intent execute(Context context) {
		// TODO Auto-generated method stub
		return null;
	}

}


也可以返回 intent对象

	Intent intent = ChartFactory.getLineChartIntent(context,
				buildDataset(titles, x, values), renderer,
				"Average temperature");
		

然后另外一个类得到intent跳转进来就好了呢


	intent = new zhexian_AChart_quandian().execute(this);
        startActivity(intent);


得到View对象后在另外一个你自己定义的布局中显示就OK了:

           //--------------------------------------------------------------------------------------------------------------
           // ------------------ 调用这个类的方法后 会返回1个 View对象,这样你就可以把这个View放到你自己的布局中啦,比如:---
           //----------------------------------------------------------------------------------------------------------------
     
        LinearLayout line1 = (LinearLayout) findViewById(R.id.zhexian); 
        GraphicalView lineView1 = new AAMy_zhexian().CreateView(this); 
        line1.addView(lineView1, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); 

 

上面的是 跟 X轴对应点数的, 是效果图的 下半部分。

下面的是 跟X轴多点的 ,是效果图的上半部分。

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.view.View;

// 这个是  一天记录 2个数据的 所以8天就 - 16个点(当时要求第一个点 从中间开始 晕- -,当然可以自己设置从 0.0开始)
public class AAMy_zhexian extends AbstractDemoChart {

	public String getName() {
		return "TestAChart";
	}

	public String getDesc() {
		return "*************TestAChart***************";
	}
	
	public GraphicalView CreateView(Context context){
		// 每个item的title
		String[] titles = new String[] { "COD达标率 ", "氨氮达标率", "污染物排放浓度 COD",
				"Skiathos" };
		// x轴的值
		List<double[]> x = new ArrayList<double[]>();
		for (int i = 0; i < titles.length; i++) {
			x.add(new double[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16});  //从X周的 0算起来 总共有几个点
		}
		
		// y轴的值
		List<double[]> values = new ArrayList<double[]>();
		
		values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,26.1,12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,26.1});
		values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26 , 10, 10, 12, 15, 20, 24, 26, 26});
		values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24 ,5, 5.3, 8, 12, 17, 22, 24.2, 24 });
		values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25 , 9, 10, 11, 15, 19, 23, 26, 25});
		
		int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN,
				Color.YELLOW };
		
		// 点的样式   DIAMOND正方形     TRIANGLE 三角形  SQUARE 圆形
		PointStyle[] styles = new PointStyle[] { PointStyle.POINT,
				PointStyle.POINT, PointStyle.POINT, PointStyle.POINT };
		
		//Renderer 就是渲染器,设置图表显示的一些特征,比如图表的大小,标题,坐标轴的颜色,背景颜色等
		XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
		int length = renderer.getSeriesRendererCount();
		// 点是空心还是实心
		for (int i = 0; i < length; i++) {
			((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
		}
		// 图表部分的背景颜色
		//renderer.setBackgroundColor(Color.parseColor("#f3f3f3"));
		renderer.setBackgroundColor(Color.WHITE);
		renderer.setApplyBackgroundColor(true);
		
		//设置显示点上的值
	//	renderer.setDisplayChartValues(true);
	//	renderer.setChartValuesTextSize(18);
		
		renderer.setFitLegend(true);//调整合适的位置
		// 图表与屏幕四边的间距颜色
		renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3));
		renderer.setChartTitleTextSize(30);
		renderer.setAxisTitleTextSize(10);
		// renderer.setLegendHeight(50);
		renderer.setLegendTextSize(10);                    // 图例文字的大小--下面分类的字体大小
		renderer.setMargins(new int[] { 50, 50, 20, 30 }); // 图离上做下右的间距,貌似没用
		// x、y轴上刻度颜色
		renderer.setXLabelsColor(Color.BLACK);
		renderer.setYLabelsColor(0, Color.BLACK);

		// 最后两个参数代表轴的颜色和轴标签的颜色     1-9  X是 1到9   0-90 Y 0到90
//		setChartSettings(renderer, "图标上方的文字", "图标下方的文字",
//				"图标左侧的文字", 0.0, 16, 0, 90, Color.BLACK, Color.BLACK);
		
		setChartSettings(renderer, "", "","", 0.0, 16, 0, 90, Color.BLACK, Color.BLACK);
		
		     // 轴上数字的数量
		    renderer.setXLabels(0);
		    renderer.setYLabels(9);
		    // 自定义横轴 X的标识 
		    renderer.addXTextLabel(2, "6月1号");
		    renderer.addXTextLabel(4, "6月2号");
		    renderer.addXTextLabel(6, "6月3号");
		    renderer.addXTextLabel(8, "6月4号");
		    renderer.addXTextLabel(10, "6月5号");
		    renderer.addXTextLabel(12, "6月6号");
		    renderer.addXTextLabel(14, "6月7号");
		    renderer.addXTextLabel(16, "6月8号");
		
		     // renderer.setBarSpacing(1);    
		     // 是否显示网格
	
		    // renderer.setPanLimits(new double[] { -10, 20, -10, 40 }); //设置拖动时X轴Y轴允许的最大值最小值.
		    // renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });//设置放大缩小时X轴Y轴允许的最大最小值.
		    renderer.setShowGrid(true);
		     // x或y轴上数字的方向,相反的。
		    renderer.setXLabelsAlign( Align.RIGHT);
	    	    renderer.setYLabelsAlign(Align.RIGHT);

		    renderer.setPanEnabled(false);   //图表是否可以移动
	            renderer.setZoomEnabled(true);   //图表是否可以缩放
	            renderer.setLegendHeight(100);   // 图标文字距离底边的高度
	        
	           //renderer.setZoomEnabled(true, false);  拖动的时候 Y轴不动
	           //renderer.setPanEnabled(true, false);   拖动的时候 X轴不动
	            renderer.setZoomButtonsVisible(false);   // 设置放大缩小按钮是否可见

		  // renderer.setPanLimits(new double[] { -10, 20, -10, 40 });
		   // renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });

		 
     /** 1、ChartFactory 

              传入Renderer,Dataset的参数,
              然后用getXXXChartIntent(Context context,XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset)方法进行图表的显示

		2、XYMutilpleSeriesRenderer 

              用于进行绘制的设置,添加的Renderer对象,用于定义绘制的点集合设置,注意数量要和Dataset添加的XYseries一致!!!

		
     */
		
	        //Intent intent = ChartFactory.getLineChartIntent(context,
			//	buildDataset(titles, x, values), renderer,
			//	"Average temperature");
		//ChartFactory.getBarChartView(context, dataset, renderer, type);
		 //把图表变成 View的方法, 
		GraphicalView view= ChartFactory.getLineChartView(context, buildDataset(titles, x, values), renderer);

		return view;
	}
	
	@Override
	public Intent execute(Context context) {
		// TODO Auto-generated method stub
		return null;
	}
}
       


















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值