前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发中使用achartengine绘制各种图表的方法

Android开发中使用achartengine绘制各种图表的方法

作者头像
砸漏
发布2020-10-23 23:20:41
1.1K0
发布2020-10-23 23:20:41
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

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

1. ABarChart.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
<?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 

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档