免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1060 | 回复: 0

[Android] 在android中使用achartengine来绘制各种图表 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-21 06:20:00
发表于 2015-05-26 10:50 |显示全部楼层
可以绘制线性图,点状图,柱状图,饼状图,气泡图等
  1. package com.anjoyo.achartengine;

  2. import java.util.Random;

  3. import org.achartengine.ChartFactory;
  4. import org.achartengine.chart.BarChart.Type;
  5. import org.achartengine.model.CategorySeries;
  6. import org.achartengine.model.XYMultipleSeriesDataset;
  7. import org.achartengine.renderer.SimpleSeriesRenderer;
  8. import org.achartengine.renderer.XYMultipleSeriesRenderer;

  9. import android.content.Context;
  10. import android.content.Intent;
  11. import android.graphics.Color;

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

  17.     private XYMultipleSeriesRenderer getBarChartRenderer() {
  18.         // TODO Auto-generated method stub
  19.         XYMultipleSeriesRenderer renderer=new XYMultipleSeriesRenderer();
  20.         SimpleSeriesRenderer r;
  21.         r=new SimpleSeriesRenderer();
  22.         r.setColor(Color.BLUE);
  23.         renderer.addSeriesRenderer(r);
  24.         r=new SimpleSeriesRenderer();
  25.         r.setColor(Color.GREEN);
  26.         renderer.addSeriesRenderer(r);
  27.         setBarChartRenderer(renderer);
  28.         return renderer;
  29.     }

  30.     private void setBarChartRenderer(XYMultipleSeriesRenderer renderer) {
  31.         // TODO Auto-generated method stub
  32.         renderer.setChartTitle("Bar Chart");
  33.         renderer.setXTitle("X Axis");
  34.         renderer.setYTitle("Y Axis");
  35.         renderer.setXAxisMax(10.5);
  36.         renderer.setXAxisMin(0.5);
  37.         renderer.setYAxisMax(210);
  38.         renderer.setYAxisMin(0);
  39.     }

  40.     private XYMultipleSeriesDataset getBarChartDataset() {
  41.         // TODO Auto-generated method stub
  42.         XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
  43.         final int SERIES_NR=2;
  44.         final int NR=10;
  45.         Random random=new Random();
  46.         for (int i = 0; i < SERIES_NR; i++) {
  47.             CategorySeries series=new CategorySeries("Bar Chart---"+(i+1));
  48.             for (int j = 0; j < NR; j++) {
  49.                 series.add(100+random.nextInt(100));
  50.             }
  51.             dataset.addSeries(series.toXYSeries());
  52.         }
  53.         return dataset;
  54.     }
  55. }
复制代码
  1. package com.anjoyo.achartengine;

  2. import java.util.Random;

  3. import org.achartengine.ChartFactory;
  4. import org.achartengine.chart.PointStyle;
  5. import org.achartengine.model.XYMultipleSeriesDataset;
  6. import org.achartengine.model.XYValueSeries;
  7. import org.achartengine.renderer.XYMultipleSeriesRenderer;
  8. import org.achartengine.renderer.XYSeriesRenderer;

  9. import android.content.Context;
  10. import android.content.Intent;
  11. import android.graphics.Color;

  12. public class ABubbleChart {
  13.     private final int SERIES_NR = 3;
  14.     private final int NR = 20;

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

  20.     private XYMultipleSeriesRenderer getBubbleChartRenderer() {
  21.         // TODO Auto-generated method stub
  22.         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
  23.         int[] linearColor = { Color.RED, Color.GREEN, Color.BLUE };
  24.         XYSeriesRenderer r;
  25.         for (int i = 0; i < SERIES_NR; i++) {
  26.             // entry=new XYEntry<Integer, Integer>(key, value);
  27.             r = new XYSeriesRenderer();
  28.             r.setColor(linearColor[i]);
  29.             r.setPointStyle(PointStyle.POINT);
  30.             r.setLineWidth(2);
  31.             renderer.addSeriesRenderer(r);
  32.         }
  33.         setBarChartRenderer(renderer);
  34.         return renderer;
  35.     }

  36.     private XYMultipleSeriesDataset getBubbleChartDataset() {
  37.         // TODO Auto-generated method stub
  38.         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
  39.         for (int i = 0; i < SERIES_NR; i++) {
  40.             XYValueSeries series = new XYValueSeries("Bubble Chart---"
  41.                     + (i + 1));
  42.             int temp = 10 * i;
  43.             int[][] data = getBasicData();
  44.             for (int j = 0; j < data.length; j++) {
  45.                 if((j+1)%5 ==0){
  46.                     int x = data[j][0];
  47.                     int y = temp;
  48.                     int value=data[j][1]+temp;
  49.                     series.add(x, y, value);
  50.                 }
  51.             }
  52.             dataset.addSeries(series);
  53.         }
  54.         return dataset;
  55.     }

  56.     private int[][] getBasicData() {
  57.         int[][] data = new int[20][2];
  58.         Random rand = new Random();
  59.         for (int i = 0; i < data.length; i++) {
  60.             data[i][0] = i;
  61.             data[i][1] = 20 + rand.nextInt(20) % 20;
  62.         }
  63.         return data;
  64.     }

  65.     private void setBarChartRenderer(XYMultipleSeriesRenderer renderer) {
  66.         // TODO Auto-generated method stub
  67.         renderer.setChartTitle("Bubble Chart");
  68.         renderer.setXTitle("X Axis");
  69.         renderer.setYTitle("Y Axis");
  70.         renderer.setXAxisMax(20);
  71.         renderer.setXAxisMin(0);
  72.         renderer.setYAxisMax(30);
  73.         renderer.setYAxisMin(0);
  74.         renderer.setAntialiasing(true);//没有看出有啥效果来
  75.         renderer.setApplyBackgroundColor(true);//设置背景颜色
  76.         renderer.setBackgroundColor(Color.TRANSPARENT);
  77.         renderer.setShowAxes(true);//
  78.         renderer.setAxesColor(Color.GRAY);
  79.         renderer.setClickEnabled(true);//设置了之后,不可再拖动
  80.         renderer.setZoomButtonsVisible(true);//设置伸缩按钮是否可见
  81.         renderer.setZoomEnabled(true);
  82.         renderer.setExternalZoomEnabled(true);//设置是否可以向伸缩
  83.         renderer.setLabelsColor(Color.GREEN);
  84.         renderer.setLabelsTextSize(16);
  85.     }
  86. }
复制代码
  1. package com.anjoyo.achartengine;

  2. import java.util.Random;

  3. import org.achartengine.ChartFactory;
  4. import org.achartengine.chart.PointStyle;
  5. import org.achartengine.model.XYMultipleSeriesDataset;
  6. import org.achartengine.model.XYSeries;
  7. import org.achartengine.renderer.XYMultipleSeriesRenderer;
  8. import org.achartengine.renderer.XYSeriesRenderer;

  9. import android.content.Context;
  10. import android.content.Intent;
  11. import android.graphics.Color;

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

  18.     private XYMultipleSeriesRenderer getLinearChartRenderer() {
  19.         // TODO Auto-generated method stub
  20.         int[] linearColor={Color.RED, Color.GREEN, Color.BLUE};
  21.         int[] belowLinearColor={Color.YELLOW, Color.CYAN, Color.GRAY};
  22.         XYMultipleSeriesRenderer renderer=new XYMultipleSeriesRenderer();
  23.         XYSeriesRenderer tempRender;
  24.         for (int i = 0; i < SERIES_NR; i++) {
  25.             tempRender=new XYSeriesRenderer();
  26.             tempRender.setColor(linearColor[i]);
  27. //          tempRender.setFillBelowLine(true);
  28. //          tempRender.setFillBelowLineColor(belowLinearColor[i]);
  29.             tempRender.setPointStyle(PointStyle.POINT);
  30.             tempRender.setLineWidth(2);
  31.             renderer.addSeriesRenderer(tempRender);
  32.         }
  33.         setLinearChartRenderer(renderer);
  34.         return renderer;
  35.     }

  36.     private void setLinearChartRenderer(XYMultipleSeriesRenderer renderer) {
  37.         // TODO Auto-generated method stub
  38.         renderer.setChartTitle("Three Linear Chart");
  39.         renderer.setXAxisMax(20);
  40.         renderer.setXAxisMin(0);
  41.         renderer.setYAxisMax(60);
  42.         renderer.setYAxisMin(0);
  43.     }

  44.     private XYMultipleSeriesDataset getLinearChartDataset() {
  45.         // TODO Auto-generated method stub
  46.         XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
  47.         for (int i = 0; i < SERIES_NR; i++) {
  48.             XYSeries series=new XYSeries("Stock Trend---"+(i+1));
  49.             int temp=10*i;
  50.             int[][] data=getBasicData();
  51.             for (int j = 0; j < data.length; j++) {
  52.                 int x=data[j][0];
  53.                 int y=temp+data[j][1];
  54.                 series.add(x, y);
  55.             }
  56.             dataset.addSeries(series);
  57.         }
  58.         return dataset;
  59.     }
  60.     private int[][] getBasicData() {
  61.         int[][] data=new int[20][2];
  62.         Random rand=new Random();
  63.         for (int i = 0; i < data.length; i++) {
  64.             data[i][0]=i;
  65.             data[i][1]=20+rand.nextInt(20)%20;
  66.         }
  67.         return data;
  68.     }
  69. }
复制代码
  1. package com.anjoyo.achartengine;

  2. import org.achartengine.ChartFactory;
  3. import org.achartengine.model.CategorySeries;
  4. import org.achartengine.renderer.DefaultRenderer;
  5. import org.achartengine.renderer.SimpleSeriesRenderer;

  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.graphics.Color;

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

  11.     public APieChart() {
  12.         // TODO Auto-generated constructor stub
  13.     }

  14.     public APieChart(double[] values) {
  15.         if (values.length == 3) {
  16.             for (int i = 0; i < values.length; i++) {
  17.                 this.values[i] = values[i];
  18.             }
  19.         }
  20.     }
  21.     public Intent execute(Context context) {
  22.         int[] colors={Color.BLUE, Color.GREEN, Color.YELLOW};
  23.         DefaultRenderer renderer=buildCategoryRenderer(colors);
  24.         renderer.setAntialiasing(true);//没有看出有啥效果来
  25.         renderer.setApplyBackgroundColor(true);//设置背景颜色
  26.         renderer.setBackgroundColor(Color.TRANSPARENT);
  27.         renderer.setShowAxes(true);//
  28.         renderer.setAxesColor(Color.GRAY);
  29.         renderer.setClickEnabled(true);//设置了之后,不可再拖动
  30.         renderer.setZoomButtonsVisible(true);//设置伸缩按钮是否可见
  31.         renderer.setZoomEnabled(true);
  32.         renderer.setExternalZoomEnabled(true);//设置是否可以向伸缩
  33.         renderer.setLabelsColor(Color.GREEN);
  34.         renderer.setLabelsTextSize(16);
  35. //      renderer.setLegendHeight(50);
  36. //      renderer.setPanEnabled(true);
  37.         renderer.setStartAngle(180);//好像不好用啊
  38.         CategorySeries series=new CategorySeries("Fruit Ratio");
  39.         series.add("Apple", values[0]);
  40.         series.add("Banana", values[1]);
  41.         series.add("Orange", values[2]);
  42.         return ChartFactory.getPieChartIntent(context, series, renderer, "水果");
  43.     }
  44.      
  45.     private DefaultRenderer buildCategoryRenderer(int[] colors) {
  46.         DefaultRenderer renderer=new DefaultRenderer();
  47.         renderer.setApplyBackgroundColor(true);
  48.         renderer.setBackgroundColor(Color.GRAY);
  49.         renderer.setLabelsTextSize(20);
  50.         renderer.setChartTitle("饼状图");
  51.         renderer.setChartTitleTextSize(20);
  52.         renderer.setLegendTextSize(20);
  53.         renderer.setLegendHeight(50);
  54.         for (int i = 0; i < colors.length; i++) {
  55.             int j = colors[i];
  56.             SimpleSeriesRenderer r=new SimpleSeriesRenderer();
  57.             r.setColor(j);
  58.             renderer.addSeriesRenderer(r);
  59.         }
  60.         return renderer;
  61.     }
  62. }
复制代码
  1. package com.anjoyo.achartengine;

  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.view.Menu;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;

  9. public class MainActivity extends Activity {
  10.     private Button lineChartBtn;
  11.     private Button areaChartBtn;
  12.     private Button scatterChartBtn;
  13.     private Button timeChartBtn;
  14.     private Button barChartBtn;
  15.     private Button pieChartBtn;
  16.     private Button bubbleChartBtn;
  17.     private Button doughnutChartBtn;
  18.     private Button rangeBarChartBtn;
  19.     private Button dialChartBtn;
  20.     @Override
  21.     protected void onCreate(Bundle savedInstanceState) {
  22.         super.onCreate(savedInstanceState);
  23.         setContentView(R.layout.activity_main);
  24.         lineChartBtn=(Button) findViewById(R.id.line_chart);
  25.         areaChartBtn=(Button) findViewById(R.id.area_chart);
  26.         scatterChartBtn=(Button) findViewById(R.id.scatter_chart);
  27.         timeChartBtn=(Button) findViewById(R.id.time_chart);
  28.         barChartBtn=(Button) findViewById(R.id.bar_chart);
  29.         pieChartBtn=(Button) findViewById(R.id.pie_chart);
  30.         bubbleChartBtn=(Button) findViewById(R.id.bubble_chart);
  31.         doughnutChartBtn=(Button) findViewById(R.id.doughnut_chart);
  32.         rangeBarChartBtn=(Button) findViewById(R.id.range_bar_chart);
  33.         dialChartBtn=(Button) findViewById(R.id.dial_chart);
  34.         OnClickListener listener=new AChartEngineListener();
  35.         lineChartBtn.setOnClickListener(listener);
  36.         pieChartBtn.setOnClickListener(listener);
  37.         barChartBtn.setOnClickListener(listener);
  38.         bubbleChartBtn.setOnClickListener(listener);
  39.     }
  40.     class AChartEngineListener implements OnClickListener{

  41.         @Override
  42.         public void onClick(View v) {
  43.             // TODO Auto-generated method stub
  44.             switch (v.getId()) {
  45.             case R.id.line_chart:
  46. //              Intent intent=new Intent(MainActivity.this, LinearChartActivity.class);
  47. //              startActivity(intent);
  48.                 Intent linearChartIntent=new ALinearChart().execute(MainActivity.this);
  49.                 startActivity(linearChartIntent);
  50.                 break;
  51.             case R.id.area_chart:
  52.                 break;
  53.             case R.id.scatter_chart:
  54.                  
  55.                 break;
  56.             case R.id.time_chart:
  57.                  
  58.                 break;
  59.             case R.id.bar_chart:
  60.                 Intent barChartIntent=new ABarChart().execute(MainActivity.this);
  61.                 startActivity(barChartIntent);
  62.                 break;
  63.             case R.id.pie_chart:
  64.                 Intent pieChartIntent=new APieChart().execute(MainActivity.this);
  65.                 startActivity(pieChartIntent);
  66.                 break;
  67.             case R.id.bubble_chart:
  68.                 Intent bubbleChartIntent=new ABubbleChart().execute(MainActivity.this);
  69.                 startActivity(bubbleChartIntent);
  70.                 break;
  71.             case R.id.doughnut_chart:
  72.                  
  73.                 break;
  74.             case R.id.range_bar_chart:
  75.                 break;
  76.             case R.id.dial_chart:
  77.                  
  78.                 break;

  79.             default:
  80.                 break;
  81.             }
  82.         }
  83.          
  84.     }
  85. }
复制代码
  1. package com.anjoyo.achartengine;

  2. import java.util.Random;

  3. import org.achartengine.ChartFactory;
  4. import org.achartengine.GraphicalView;
  5. import org.achartengine.chart.PointStyle;
  6. import org.achartengine.model.XYMultipleSeriesDataset;
  7. import org.achartengine.model.XYSeries;
  8. import org.achartengine.renderer.XYMultipleSeriesRenderer;
  9. import org.achartengine.renderer.XYSeriesRenderer;

  10. import android.app.Activity;
  11. import android.graphics.Color;
  12. import android.os.Bundle;
  13. import android.view.ViewGroup.LayoutParams;
  14. import android.widget.LinearLayout;

  15. public class LinearChartActivity extends Activity {
  16.     private XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
  17.     private XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
  18.     private XYSeries currentSeries;
  19.     private XYSeriesRenderer currentRenderer;
  20.     private String dateFormat;
  21.     private GraphicalView chartView;

  22.     @Override
  23.     protected void onRestoreInstanceState(Bundle savedInstanceState) {
  24.         // TODO Auto-generated method stub
  25.         super.onRestoreInstanceState(savedInstanceState);
  26.         dataset = (XYMultipleSeriesDataset) savedInstanceState
  27.                 .getSerializable("dataset");
  28.         renderer = (XYMultipleSeriesRenderer) savedInstanceState
  29.                 .getSerializable("renderer");
  30.         currentSeries = (XYSeries) savedInstanceState
  31.                 .getSerializable("current_series");
  32.         currentRenderer = (XYSeriesRenderer) savedInstanceState
  33.                 .getSerializable("current_renderer");
  34.         dateFormat = savedInstanceState.getString("date_format");
  35.     }

  36.     @Override
  37.     protected void onSaveInstanceState(Bundle outState) {
  38.         // TODO Auto-generated method stub
  39.         super.onSaveInstanceState(outState);
  40.         outState.putSerializable("dataset", dataset);
  41.         outState.putSerializable("renderer", renderer);
  42.         outState.putSerializable("current_series", currentSeries);
  43.         outState.putSerializable("current_renderer", currentRenderer);
  44.         outState.putString("date_format", dateFormat);
  45.     }

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

  51.         String seriesTitle = "上证指数";
  52.         XYSeries series = new XYSeries(seriesTitle);
  53.         dataset.addSeries(series);
  54.         currentSeries = series;
  55.         XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
  56.         seriesRenderer.setColor(Color.BLUE);
  57.         seriesRenderer.setFillBelowLine(true);
  58. //      seriesRenderer.setFillBelowLineColor(Color.RED);//折线下面区域是否添加颜色
  59.         seriesRenderer.setPointStyle(PointStyle.POINT);
  60.         seriesRenderer.setLineWidth(3);
  61.         renderer.addSeriesRenderer(seriesRenderer);
  62. //      添加另外一条曲线图
  63. //      seriesRenderer = new XYSeriesRenderer();
  64. //      seriesRenderer.setColor(Color.GREEN);
  65. //      seriesRenderer.setFillBelowLine(true);
  66. //      seriesRenderer.setFillBelowLineColor(Color.YELLOW);
  67. //      seriesRenderer.setPointStyle(PointStyle.POINT);
  68. //      seriesRenderer.setLineWidth(3);
  69. //      renderer.addSeriesRenderer(seriesRenderer);
  70.          
  71.         renderer.setYAxisMin(0);
  72.         renderer.setYAxisMax(100);
  73.         renderer.setXAxisMax(20);
  74.         renderer.setShowGrid(false);
  75.         renderer.setXLabels(20);
  76.         renderer.setChartTitle("上证指数-24小时趋势图");

  77.         currentRenderer = seriesRenderer;
  78.         double x = 0;
  79.         double y = 0;
  80.         int[][] xyValues = getValues();
  81. //      for (int i = 0; i < 2; i++) {
  82. //         
  83.             for (int j = 0; j < xyValues.length; j++) {
  84.                 x=xyValues[j][0];
  85.                 y=xyValues[j][1];
  86.                 currentSeries.add(x, y);
  87.             }
  88. //      }
  89.     }
  90.      
  91.     @Override
  92.     protected void onResume() {
  93.         // TODO Auto-generated method stub
  94.         if(chartView == null){
  95.             LinearLayout layout=(LinearLayout) findViewById(R.id.chart);
  96.             chartView=ChartFactory.getLineChartView(this, dataset, renderer);
  97.             layout.addView(chartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
  98.         }else {
  99.             chartView.setBackgroundResource(R.id.chart);
  100.             chartView.repaint();
  101.         }
  102.         super.onResume();
  103.     }

  104.     private int[][] getValues() {
  105.         // TODO Auto-generated method stub
  106.         int[][] xyValues = new int[20][2];
  107.         Random rand=new Random();
  108.         for (int i = 0; i < xyValues.length; i++) {
  109.             xyValues[i][0]=i;
  110.             xyValues[i][1]=rand.nextInt(100);
  111.         }
  112.         return xyValues;
  113.     }
  114. }
复制代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     package="com.anjoyo.achartengine"
  4.     android:versionCode="1"
  5.     android:versionName="1.0" >

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

  9.     <application
  10.         android:allowBackup="true"
  11.         android:icon="@drawable/ic_launcher"
  12.         android:label="@string/app_name"
  13.         android:theme="@style/AppBaseTheme"
  14.          >
  15.         <activity
  16.             android:name="com.anjoyo.achartengine.MainActivity"
  17.             android:label="@string/app_name" >
  18.             <intent-filter>
  19.                 <action android:name="android.intent.action.MAIN" />
  20.                 <category android:name="android.intent.category.LAUNCHER" />
  21.             </intent-filter>
  22.         </activity>
  23.          
  24.         <activity android:name=".LinearChartActivity"></activity>
  25.         <activity android:name="org.achartengine.GraphicalActivity"></activity>
  26.     </application>
  27. </manifest>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP