2013/06/17

Android achartengine 曲線圖

剛轉來樹德的時候,曾跟兩位朋友組成工作室,也有用到這個套件
當下對Java並不熟悉,也不太會用工具
就不了了之,解散後還是有在接觸到這套,但還是用不出來啊XD

最近又想做一些東西,回來學習學習
順便把當初不懂的套件用懂XD




package com.example.testchart;

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;

public class MainActivity extends Activity {
 private XYMultipleSeriesDataset dataset;
 private XYMultipleSeriesRenderer renderer;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  init();
 }

 private void init() {
  renderer = new XYMultipleSeriesRenderer();
  renderer.setOrientation(XYMultipleSeriesRenderer.Orientation.HORIZONTAL);
  renderer.setXTitle("X軸");// 設置X軸標題
  renderer.setYTitle("Y軸");// 設置Y軸標題
  renderer.setAxisTitleTextSize(20);// 設定軸標題文字大小
  renderer.setChartTitle("標題");// 設定圖標標題
  renderer.setChartTitleTextSize(30);// 設定圖表文字大小
  renderer.setLabelsTextSize(18);// 設定標籤大小
  renderer.setLegendTextSize(20);// 設定左下圖例文字大小 例如:第一條線、第二條線
  renderer.setPointSize(10f);// 設定每個點的大小
  renderer.setYAxisMin(0);// 設定Y軸最小值
  renderer.setYAxisMax(15); // 設定Y軸最大值
  renderer.setYLabels(10);// 設定Y軸刻度
  renderer.setXAxisMax(5); // 設定X軸最大值
  renderer.setShowGrid(true);// 顯示網格

  // 設定X軸對應標題
  renderer.addXTextLabel(1, "1月");
  renderer.addXTextLabel(2, "2月");
  renderer.addXTextLabel(3, "3月");
  renderer.addXTextLabel(4, "4月");
  // renderer.setXLabels(0);
  renderer.setMargins(new int[] { 20, 20, 20, 10 });// 設定圖表的位置
  dataset = new XYMultipleSeriesDataset();
  addSeries();
  showChart();
 }

 private void addSeries() {
  XYSeries series = new XYSeries("第一條線");
  for (int index = 1; index <= 4; index++) {
   series.add(index, index * 4);
  }

  XYSeries series2 = new XYSeries("第二條線");
  for (int index = 1; index <= 4; index++) {
   series2.add(index, index * 3);
  }
  dataset.addSeries(series);
  dataset.addSeries(series2);
 }

 private void showChart() {
  XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
  seriesRenderer.setColor(Color.BLUE);// 設定線條顏色
  seriesRenderer.setPointStyle(PointStyle.DIAMOND);// 設置為菱形
  seriesRenderer.setFillPoints(true);// 設定空心或實心
  seriesRenderer.setDisplayChartValues(true);// 顯示數值
  seriesRenderer.setChartValuesSpacing(10);// 顯示
  seriesRenderer.setChartValuesTextSize(12);// 數值的文字大小
  seriesRenderer.setLineWidth(1);// 線寬

  XYSeriesRenderer seriesRenderer2 = new XYSeriesRenderer();
  seriesRenderer2.setColor(Color.MAGENTA);
  seriesRenderer2.setPointStyle(PointStyle.CIRCLE);// 設置為圓點
  seriesRenderer2.setFillPoints(true);// 設定空心或實心
  seriesRenderer2.setDisplayChartValues(true);// 顯示數值
  seriesRenderer2.setChartValuesSpacing(10);// 顯示
  seriesRenderer2.setChartValuesTextSize(25);// 數值的文字大小
  seriesRenderer2.setLineWidth(3);// 線寬

  renderer.addSeriesRenderer(seriesRenderer);
  renderer.addSeriesRenderer(seriesRenderer2);

  GraphicalView view = ChartFactory.getLineChartView(this, dataset,
    renderer);
  view.setBackgroundColor(Color.BLACK); // 設定背景
  setContentView(view);
 }

}


結果就是這樣





參考資料:
http://blog.csdn.net/tianshi1017/article/details/8659676
http://www.achartengine.org/content/javadoc/index.html