AChartEngine主要透過ChartFactory.getBarChartView()決定Chart的類型, 主要傳入參數是Dataset及Renderer, 一個MultipleRenderer就是一個Chart, 可包含多個Renderer, Renderer的資料來源是Dataset, 可透過Series設定多個資料來源
STP1. 下載AChartEngine, 我使用的版本是achartengine-1.0.0.jar.zip, 複製至\libs下, 並匯入Eclipse, Project>Proerties>JavaBuildPath>Libraries>AddExternalJAR..>OK
STP2. res/layout/activity_main.xml, 加入一個LinearLayout以承接BarChart
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/llBarChart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
</TableLayout>
STP3. src/../MainActivity.java
AChartEngine主要透過ChartFactory.getBarChartView()決定Chart的類型, 主要傳入參數是Dataset及Renderer, 一個MultipleRenderer就是一個Chart, 可包含多個Renderer, Renderer的資料來源是Dataset, 可透過Series設定多個資料來源
package com.example.achartenginebarchart;
import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.graphics.Typeface;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
public class MainActivity extends Activity {
private LinearLayout llBarChart;
private View vChart;
private String[][] Top10ErrCode={{"ADFU1","20"},{"MBPW2","19"},{"ABCDE","17"},{"BLFU1","16"},{"LCVD3","15"},{"ADDK1","11"},{"CMFU3","8"},{"LCCR2","7"},{"QBLE1","5"},{"SPNS1","2"}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
llBarChart = (LinearLayout) findViewById(R.id.llBarChart);
try{
vChart = getBarChart("PQC Top 10 ErrCode", "ErrCode", "QTY", Top10ErrCode);
llBarChart.removeAllViews();
//llBarChart.addView(vChart);
llBarChart.addView(vChart, new LayoutParams(LayoutParams.WRAP_CONTENT, 300));
}catch(Exception e){
}
}
private View getBarChart(String chartTitle, String XTitle, String YTitle, String[][] xy){
XYSeries Series = new XYSeries(YTitle);
XYMultipleSeriesDataset Dataset = new XYMultipleSeriesDataset();
Dataset.addSeries(Series);
XYMultipleSeriesRenderer Renderer = new XYMultipleSeriesRenderer();
XYSeriesRenderer yRenderer = new XYSeriesRenderer();
Renderer.addSeriesRenderer(yRenderer);
//Renderer.setApplyBackgroundColor(true); //設定背景顏色
//Renderer.setBackgroundColor(Color.BLACK); //設定圖內圍背景顏色
Renderer.setMarginsColor(Color.WHITE); //設定圖外圍背景顏色
Renderer.setTextTypeface(null, Typeface.BOLD); //設定文字style
Renderer.setShowGrid(true); //設定網格
Renderer.setGridColor(Color.GRAY); //設定網格顏色
Renderer.setChartTitle(chartTitle); //設定標頭文字
Renderer.setLabelsColor(Color.BLACK); //設定標頭文字顏色
Renderer.setChartTitleTextSize(20); //設定標頭文字大小
Renderer.setAxesColor(Color.BLACK); //設定雙軸顏色
Renderer.setBarSpacing(0.5); //設定bar間的距離
//Renderer.setXTitle(XTitle); //設定X軸文字
//Renderer.setYTitle(YTitle); //設定Y軸文字
Renderer.setXLabelsColor(Color.BLACK); //設定X軸文字顏色
Renderer.setYLabelsColor(0, Color.BLACK); //設定Y軸文字顏色
Renderer.setXLabelsAlign(Align.CENTER); //設定X軸文字置中
Renderer.setYLabelsAlign(Align.CENTER); //設定Y軸文字置中
Renderer.setXLabelsAngle(-25); //設定X軸文字傾斜度
Renderer.setXLabels(0); //設定X軸不顯示數字, 改以程式設定文字
Renderer.setYAxisMin(0); //設定Y軸文最小值
yRenderer.setColor(Color.RED); //設定Series顏色
//yRenderer.setDisplayChartValues(true); //展現Series數值
Series.add(0, 0);
Renderer.addXTextLabel(0, "");
for(int r=0; r<xy.length; r++) {
//Log.i("DEBUG", (r+1)+" "+xy[r][0]+"; "+xy[r][1]);
Renderer.addXTextLabel(r+1, xy[r][0]);
Series.add(r+1, Integer.parseInt(xy[r][1]));
}
Series.add(11, 0);
Renderer.addXTextLabel(xy.length+1, "");
View view = ChartFactory.getBarChartView(getBaseContext(), Dataset, Renderer, Type.DEFAULT);
return view;
}
}
STP4. 必須要把org.achartengine.GraphicalActivity加入application, 否則會出現android.content.ActivityNotFoundException
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.achartenginebarchart"
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/AppTheme" >
<activity
android:name="com.example.achartenginebarchart.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="org.achartengine.GraphicalActivity" />
</application>
</manifest>
結果如下