当前位置: 首页 > 工具软件 > AChartEngine > 使用案例 >

android自定义achartengine,Android开发中使用achartengine绘制各种图表的方法

岳迪
2023-12-01

本文实例讲述了Android开发中使用achartengine绘制各种图表的方法。分享给大家供大家参考,具体如下:

1. ABarChart.java

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

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(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

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

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

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

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

package="com.anjoyo.achartengine"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="8"

android:targetSdkVersion="17" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppBaseTheme"

>

android:name="com.anjoyo.achartengine.MainActivity"

android:label="@string/app_name" >

希望本文所述对大家Android程序设计有所帮助。

 类似资料: