AChartEngine中对比图

package com.sprd.chartexample;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.chartdemo.demo.chart.XYChartBuilder;
import org.achartengine.model.SeriesSelection;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer.FillOutsideLine;
import org.achartengine.tools.PanListener;
import org.achartengine.tools.ZoomEvent;
import org.achartengine.tools.ZoomListener;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {
	public static final String TYPE = "type";

	private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();

	private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 饼图
		// Intent pie = new APieChartExample().execute(this);
		// startActivity(pie);

		// 折线图
		// Intent line = new ALineChartExample().execute(this);
		// startActivity(line);

		// 柱状图
		// Intent bar = new ABarChartExample().execute(this);
		// startActivity(bar);
		// 构建数据
		// 设置图表显示的位置
		mRenderer.setMargins(new int[] { 30, 30, 30, 30 });
		// 设置图表的X轴处于水平方向还是垂直方向
		mRenderer
				.setOrientation(XYMultipleSeriesRenderer.Orientation.HORIZONTAL);

		mRenderer.setXTitle("时间");// 设置为X轴的标题
		mRenderer.setYTitle("百分比");// 设置Y轴的标题
		mRenderer.setAxisTitleTextSize(20);// 设置轴标题文本大小
		mRenderer.setChartTitle("Cpu Load");// 设置图表标题
		mRenderer.setChartTitleTextSize(30);// 设置图表标题文字的大小
		mRenderer.setLabelsTextSize(22);// 设置标签的文字大小 ,刻度文本的大小
		// mRenderer.setLegendTextSize(20);//设置图例文本大小
		mRenderer.setYAxisMin(-10);// 设置y轴最小值是0
		mRenderer.setYAxisMax(50); // 设置Y轴最大值为50
		mRenderer.setYLabels(5);// 设置Y轴刻度个数(貌似不太准确)
		mRenderer.setYLabelsAlign(Align.RIGHT);// y轴字体对齐方式
		mRenderer.setYLabelsPadding(5);// y轴的间距
		mRenderer.setYLabelsVerticalPadding(-5); // y轴标签垂直间距
		mRenderer.setYLabelsAngle(-45);// 标签倾斜的角度
		mRenderer.setXLabelsPadding(5); // x轴标签间距
		mRenderer.setXAxisMax(10); // x轴最大值
		mRenderer.setXAxisMin(-1); // x轴最大值
		mRenderer.setXLabelsAngle(-45);// x标签倾斜的角度
		mRenderer.setXLabelsAlign(Align.CENTER);
		mRenderer.setShowGrid(true);// 显示网格
		mRenderer.setApplyBackgroundColor(true);// 允许设置背景颜色
		mRenderer.setBackgroundColor(Color.BLACK);

		// mRenderer.setXLabels(0);
		Random r = new Random();
		int[] colors = { Color.BLUE, Color.RED, Color.GREEN, Color.YELLOW,
				Color.LTGRAY };
		PointStyle[] styles = { PointStyle.SQUARE, PointStyle.CIRCLE,
				PointStyle.DIAMOND, PointStyle.DIAMOND, PointStyle.TRIANGLE };
		String[] titles = { "cpu0", "cpu1", "差值" };
		for (int i = 0; i < 3; i++) {
			// 线的条数,也就是对象的意思,显示在图表下,用于提示信息,比如Cpu有5个
			XYSeries series = new XYSeries(titles[i]);
			for (int k = 0; k < 10; k++) {
				if (i == 2) {
					series.add(k, mDataset.getSeriesAt(0).getY(k)
							- mDataset.getSeriesAt(1).getY(k));
				} else {
					series.add(k, 20 + r.nextInt(20));
				}
			}
			mDataset.addSeries(series);
			// 点的绘制进行设置
			XYSeriesRenderer xyRenderer = new XYSeriesRenderer();
			if (i == 2) {
				FillOutsideLine fill = new FillOutsideLine(
						FillOutsideLine.Type.BOUNDS_ALL);
				fill.setColor(Color.GREEN);
				xyRenderer.addFillOutsideLine(fill);
			}
			// 设置颜色
			xyRenderer.setColor(colors[i]);
			// 设置点的样式
			xyRenderer.setPointStyle(styles[i]);
			xyRenderer.setPointStrokeWidth(3f);
			// 线条宽度
			xyRenderer.setLineWidth(3);
			// 是否显示值
			xyRenderer.setDisplayChartValues(true);
			// 如果显示值,字体大小
			xyRenderer.setChartValuesTextSize(10);
			// 点的形状,是空心的还是实心的
			xyRenderer.setFillPoints(false);
			// 刻度之间的距离
			xyRenderer.setDisplayChartValuesDistance(0);
			// 点与数值的距离
			xyRenderer.setChartValuesSpacing(1);
			//
			xyRenderer.setDisplayBoundingPoints(false);
			// 点的面积
			xyRenderer.setPointStrokeWidth(1);
			// 是否显示图例
			xyRenderer.setShowLegendItem(true);
			mRenderer.addSeriesRenderer(xyRenderer);

		}
		Intent intent = ChartFactory.getCubicLineChartIntent(this, mDataset,
				mRenderer, 0.1f);

		startActivity(intent);

	}
}



对比图,肯定原始数据有2条,然后自己计算第三条数据的值,最后给第三条数据的渲染器设置填充。


图:



你可能感兴趣的:(achartengine)