欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

在android中使用achartengine来绘制各种图表,

来源: 开发者 投稿于  被查看 49245 次 评论:218

在android中使用achartengine来绘制各种图表,


可以绘制线性图,点状图,柱状图,饼状图,气泡图等

1.[文件] ABarChart.java~2KB 下载(249)

package com.anjoyo.achartengine;

import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;

public class ABarChart {
    public Intent execute(Context context) {
    	
		return ChartFactory.getBarChartIntent(context, getBarChartDataset(), getBarChartRenderer(), Type.DEFAULT);
	}

	private XYMultipleSeriesRenderer getBarChartRenderer() {
		// TODO Auto-generated method stub
		XYMultipleSeriesRenderer renderer=new XYMultipleSeriesRenderer();
		SimpleSeriesRenderer r;
		r=new SimpleSeriesRenderer();
		r.setColor(Color.BLUE);
		renderer.addSeriesRenderer(r);
		r=new SimpleSeriesRenderer();
		r.setColor(Color.GREEN);
		renderer.addSeriesRenderer(r);
		setBarChartRenderer(renderer);
		return renderer;
	}

	private void setBarChartRenderer(XYMultipleSeriesRenderer renderer) {
		// TODO Auto-generated method stub
		renderer.setChartTitle("Bar Chart");
		renderer.setXTitle("X Axis");
		renderer.setYTitle("Y Axis");
		renderer.setXAxisMax(10.5);
		renderer.setXAxisMin(0.5);
		renderer.setYAxisMax(210);
		renderer.setYAxisMin(0);
	}

	private XYMultipleSeriesDataset getBarChartDataset() {
		// TODO Auto-generated method stub
		XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
		final int SERIES_NR=2;
		final int NR=10;
		Random random=new Random();
		for (int i = 0; i < SERIES_NR; i++) {
			CategorySeries series=new CategorySeries("Bar Chart---"+(i+1));
			for (int j = 0; j < NR; j++) {
				series.add(100+random.nextInt(100));
			}
			dataset.addSeries(series.toXYSeries());
		}
		return dataset;
	}
}

2.[文件] ABubbleChart.java~3KB 下载(123)

package com.anjoyo.achartengine;

import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYValueSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;

public class ABubbleChart {
	private final int SERIES_NR = 3;
	private final int NR = 20;

	public Intent execute(Context context) {
		return ChartFactory.getBubbleChartIntent(context,
				getBubbleChartDataset(), getBubbleChartRenderer(),
				"Bubble Chart Demo");
	}

	private XYMultipleSeriesRenderer getBubbleChartRenderer() {
		// TODO Auto-generated method stub
		XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
		int[] linearColor = { Color.RED, Color.GREEN, Color.BLUE };
		XYSeriesRenderer r;
		for (int i = 0; i < SERIES_NR; i++) {
			// entry=new XYEntry<Integer, Integer>(key, value);
			r = new XYSeriesRenderer();
			r.setColor(linearColor[i]);
			r.setPointStyle(PointStyle.POINT);
			r.setLineWidth(2);
			renderer.addSeriesRenderer(r);
		}
		setBarChartRenderer(renderer);
		return renderer;
	}

	private XYMultipleSeriesDataset getBubbleChartDataset() {
		// TODO Auto-generated method stub
		XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
		for (int i = 0; i < SERIES_NR; i++) {
			XYValueSeries series = new XYValueSeries("Bubble Chart---"
					+ (i + 1));
			int temp = 10 * i;
			int[][] data = getBasicData();
			for (int j = 0; j < data.length; j++) {
				if((j+1)%5 ==0){
					int x = data[j][0];
					int y = temp;
					int value=data[j][1]+temp;
					series.add(x, y, value);
				}
			}
			dataset.addSeries(series);
		}
		return dataset;
	}

	private int[][] getBasicData() {
		int[][] data = new int[20][2];
		Random rand = new Random();
		for (int i = 0; i < data.length; i++) {
			data[i][0] = i;
			data[i][1] = 20 + rand.nextInt(20) % 20;
		}
		return data;
	}

	private void setBarChartRenderer(XYMultipleSeriesRenderer renderer) {
		// TODO Auto-generated method stub
		renderer.setChartTitle("Bubble Chart");
		renderer.setXTitle("X Axis");
		renderer.setYTitle("Y Axis");
		renderer.setXAxisMax(20);
		renderer.setXAxisMin(0);
		renderer.setYAxisMax(30);
		renderer.setYAxisMin(0);
		renderer.setAntialiasing(true);//没有看出有啥效果来
		renderer.setApplyBackgroundColor(true);//设置背景颜色
		renderer.setBackgroundColor(Color.TRANSPARENT);
		renderer.setShowAxes(true);//
		renderer.setAxesColor(Color.GRAY);
		renderer.setClickEnabled(true);//设置了之后,不可再拖动
		renderer.setZoomButtonsVisible(true);//设置伸缩按钮是否可见
		renderer.setZoomEnabled(true);
		renderer.setExternalZoomEnabled(true);//设置是否可以向伸缩
		renderer.setLabelsColor(Color.GREEN);
		renderer.setLabelsTextSize(16);
	}
}

3.[文件] ALinearChart.java~2KB 下载(132)

package com.anjoyo.achartengine;

import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;

public class ALinearChart {
	private final int SERIES_NR=3;
	private final int NR=20;
    public Intent execute(Context context) {
		return ChartFactory.getLineChartIntent(context, getLinearChartDataset(), getLinearChartRenderer(), "Linear Chart Another");
	}

	private XYMultipleSeriesRenderer getLinearChartRenderer() {
		// TODO Auto-generated method stub
		int[] linearColor={Color.RED, Color.GREEN, Color.BLUE};
		int[] belowLinearColor={Color.YELLOW, Color.CYAN, Color.GRAY};
		XYMultipleSeriesRenderer renderer=new XYMultipleSeriesRenderer();
		XYSeriesRenderer tempRender;
		for (int i = 0; i < SERIES_NR; i++) {
			tempRender=new XYSeriesRenderer();
			tempRender.setColor(linearColor[i]);
//			tempRender.setFillBelowLine(true);
//			tempRender.setFillBelowLineColor(belowLinearColor[i]);
			tempRender.setPointStyle(PointStyle.POINT);
			tempRender.setLineWidth(2);
			renderer.addSeriesRenderer(tempRender);
		}
		setLinearChartRenderer(renderer);
		return renderer;
	}

	private void setLinearChartRenderer(XYMultipleSeriesRenderer renderer) {
		// TODO Auto-generated method stub
		renderer.setChartTitle("Three Linear Chart");
		renderer.setXAxisMax(20);
		renderer.setXAxisMin(0);
		renderer.setYAxisMax(60);
		renderer.setYAxisMin(0);
	}

	private XYMultipleSeriesDataset getLinearChartDataset() {
		// TODO Auto-generated method stub
		XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
		for (int i = 0; i < SERIES_NR; i++) {
			XYSeries series=new XYSeries("Stock Trend---"+(i+1));
			int temp=10*i;
			int[][] data=getBasicData();
			for (int j = 0; j < data.length; j++) {
				int x=data[j][0];
				int y=temp+data[j][1];
				series.add(x, y);
			}
			dataset.addSeries(series);
		}
		return dataset;
	}
	private int[][] getBasicData() {
		int[][] data=new int[20][2];
		Random rand=new Random();
		for (int i = 0; i < data.length; i++) {
			data[i][0]=i;
			data[i][1]=20+rand.nextInt(20)%20;
		}
		return data;
	}
}

4.[文件] APieChart.java~2KB 下载(126)

package com.anjoyo.achartengine;

import org.achartengine.ChartFactory;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;

public class APieChart {
	private double[] values = { 25, 30, 45 };

	public APieChart() {
		// TODO Auto-generated constructor stub
	}

	public APieChart(double[] values) {
		if (values.length == 3) {
			for (int i = 0; i < values.length; i++) {
				this.values[i] = values[i];
			}
		}
	}
	public Intent execute(Context context) {
		int[] colors={Color.BLUE, Color.GREEN, Color.YELLOW};
		DefaultRenderer renderer=buildCategoryRenderer(colors);
		renderer.setAntialiasing(true);//没有看出有啥效果来
		renderer.setApplyBackgroundColor(true);//设置背景颜色
		renderer.setBackgroundColor(Color.TRANSPARENT);
		renderer.setShowAxes(true);//
		renderer.setAxesColor(Color.GRAY);
		renderer.setClickEnabled(true);//设置了之后,不可再拖动
		renderer.setZoomButtonsVisible(true);//设置伸缩按钮是否可见
		renderer.setZoomEnabled(true);
		renderer.setExternalZoomEnabled(true);//设置是否可以向伸缩
		renderer.setLabelsColor(Color.GREEN);
		renderer.setLabelsTextSize(16);
//		renderer.setLegendHeight(50);
//		renderer.setPanEnabled(true);
		renderer.setStartAngle(180);//好像不好用啊
		CategorySeries series=new CategorySeries("Fruit Ratio");
		series.add("Apple", values[0]);
		series.add("Banana", values[1]);
		series.add("Orange", values[2]);
		return ChartFactory.getPieChartIntent(context, series, renderer, "水果");
	}
	
	private DefaultRenderer buildCategoryRenderer(int[] colors) {
		DefaultRenderer renderer=new DefaultRenderer();
		renderer.setApplyBackgroundColor(true);
		renderer.setBackgroundColor(Color.GRAY);
		renderer.setLabelsTextSize(20);
		renderer.setChartTitle("饼状图");
		renderer.setChartTitleTextSize(20);
		renderer.setLegendTextSize(20);
		renderer.setLegendHeight(50);
		for (int i = 0; i < colors.length; i++) {
			int j = colors[i];
			SimpleSeriesRenderer r=new SimpleSeriesRenderer();
			r.setColor(j);
			renderer.addSeriesRenderer(r);
		}
		return renderer;
	}
}

5.[文件] MainActivity.java~3KB 下载(130)

package com.anjoyo.achartengine;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
    private Button lineChartBtn;
    private Button areaChartBtn;
    private Button scatterChartBtn;
    private Button timeChartBtn;
    private Button barChartBtn;
    private Button pieChartBtn;
    private Button bubbleChartBtn;
    private Button doughnutChartBtn;
    private Button rangeBarChartBtn;
    private Button dialChartBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lineChartBtn=(Button) findViewById(R.id.line_chart);
        areaChartBtn=(Button) findViewById(R.id.area_chart);
        scatterChartBtn=(Button) findViewById(R.id.scatter_chart);
        timeChartBtn=(Button) findViewById(R.id.time_chart);
        barChartBtn=(Button) findViewById(R.id.bar_chart);
        pieChartBtn=(Button) findViewById(R.id.pie_chart);
        bubbleChartBtn=(Button) findViewById(R.id.bubble_chart);
        doughnutChartBtn=(Button) findViewById(R.id.doughnut_chart);
        rangeBarChartBtn=(Button) findViewById(R.id.range_bar_chart);
        dialChartBtn=(Button) findViewById(R.id.dial_chart);
        OnClickListener listener=new AChartEngineListener();
        lineChartBtn.setOnClickListener(listener);
        pieChartBtn.setOnClickListener(listener);
        barChartBtn.setOnClickListener(listener);
        bubbleChartBtn.setOnClickListener(listener);
    }
    class AChartEngineListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch (v.getId()) {
			case R.id.line_chart:
//				Intent intent=new Intent(MainActivity.this, LinearChartActivity.class);
//				startActivity(intent);
				Intent linearChartIntent=new ALinearChart().execute(MainActivity.this);
				startActivity(linearChartIntent);
				break;
			case R.id.area_chart:
				break;
			case R.id.scatter_chart:
				
				break;
			case R.id.time_chart:
				
				break;
			case R.id.bar_chart:
				Intent barChartIntent=new ABarChart().execute(MainActivity.this);
				startActivity(barChartIntent);
				break;
			case R.id.pie_chart:
				Intent pieChartIntent=new APieChart().execute(MainActivity.this);
				startActivity(pieChartIntent);
				break;
			case R.id.bubble_chart:
				Intent bubbleChartIntent=new ABubbleChart().execute(MainActivity.this);
				startActivity(bubbleChartIntent);
				break;
			case R.id.doughnut_chart:
				
				break;
			case R.id.range_bar_chart:
				break;
			case R.id.dial_chart:
				
				break;

			default:
				break;
			}
		}
    	
    }
}

6.[文件] LinearChartActivity.java~4KB 下载(137)

package com.anjoyo.achartengine;

import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class LinearChartActivity extends Activity {
	private XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
	private XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
	private XYSeries currentSeries;
	private XYSeriesRenderer currentRenderer;
	private String dateFormat;
	private GraphicalView chartView;

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onRestoreInstanceState(savedInstanceState);
		dataset = (XYMultipleSeriesDataset) savedInstanceState
				.getSerializable("dataset");
		renderer = (XYMultipleSeriesRenderer) savedInstanceState
				.getSerializable("renderer");
		currentSeries = (XYSeries) savedInstanceState
				.getSerializable("current_series");
		currentRenderer = (XYSeriesRenderer) savedInstanceState
				.getSerializable("current_renderer");
		dateFormat = savedInstanceState.getString("date_format");
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		// TODO Auto-generated method stub
		super.onSaveInstanceState(outState);
		outState.putSerializable("dataset", dataset);
		outState.putSerializable("renderer", renderer);
		outState.putSerializable("current_series", currentSeries);
		outState.putSerializable("current_renderer", currentRenderer);
		outState.putString("date_format", dateFormat);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.stock_chart);

		String seriesTitle = "上证指数";
		XYSeries series = new XYSeries(seriesTitle);
		dataset.addSeries(series);
		currentSeries = series;
		XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
		seriesRenderer.setColor(Color.BLUE);
		seriesRenderer.setFillBelowLine(true);
//		seriesRenderer.setFillBelowLineColor(Color.RED);//折线下面区域是否添加颜色
		seriesRenderer.setPointStyle(PointStyle.POINT);
		seriesRenderer.setLineWidth(3);
		renderer.addSeriesRenderer(seriesRenderer);
//		添加另外一条曲线图
//		seriesRenderer = new XYSeriesRenderer();
//		seriesRenderer.setColor(Color.GREEN);
//		seriesRenderer.setFillBelowLine(true);
//		seriesRenderer.setFillBelowLineColor(Color.YELLOW);
//		seriesRenderer.setPointStyle(PointStyle.POINT);
//		seriesRenderer.setLineWidth(3);
//		renderer.addSeriesRenderer(seriesRenderer);
		
		renderer.setYAxisMin(0);
		renderer.setYAxisMax(100);
		renderer.setXAxisMax(20);
		renderer.setShowGrid(false);
		renderer.setXLabels(20);
		renderer.setChartTitle("上证指数-24小时趋势图");

		currentRenderer = seriesRenderer;
		double x = 0;
		double y = 0;
		int[][] xyValues = getValues();
//		for (int i = 0; i < 2; i++) {
//			
			for (int j = 0; j < xyValues.length; j++) {
				x=xyValues[j][0];
				y=xyValues[j][1];
				currentSeries.add(x, y);
			}
//		}
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		if(chartView == null){
			LinearLayout layout=(LinearLayout) findViewById(R.id.chart);
			chartView=ChartFactory.getLineChartView(this, dataset, renderer);
			layout.addView(chartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
		}else {
			chartView.setBackgroundResource(R.id.chart);
			chartView.repaint();
		}
		super.onResume();
	}

	private int[][] getValues() {
		// TODO Auto-generated method stub
		int[][] xyValues = new int[20][2];
		Random rand=new Random();
		for (int i = 0; i < xyValues.length; i++) {
			xyValues[i][0]=i;
			xyValues[i][1]=rand.nextInt(100);
		}
		return xyValues;
	}
}

7.[文件] AndroidManifest.xml~1KB 下载(130)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.anjoyo.achartengine"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppBaseTheme"
         >
        <activity
            android:name="com.anjoyo.achartengine.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <activity android:name=".LinearChartActivity"></activity>
        <activity android:name="org.achartengine.GraphicalActivity"></activity>
    </application>
</manifest>

用户评论