AChartEngine應用之PieChart(餅圖)
構建餅圖的步驟主要分為以下三步,還需要在項目中引入AChartEngine依賴jar包,在Manifest中添加:<activityandroid:name="org.achartengine.GraphicalActivity" />
1. 設定DefaultRenderer
DefaultRenderer mRenderer = new DefaultRenderer();// PieChart的主要描繪器 mRenderer.setZoomButtonsVisible(true);// 顯示放大縮小功能按鈕 mRenderer.setStartAngle(180);// 設定為水平開始 mRenderer.setDisplayValues(true);// 顯示資料 mRenderer.setFitLegend(true);// 設定是否顯示圖例 mRenderer.setLegendTextSize(10);// 設定圖例字型大小 mRenderer.setLegendHeight(10);// 設定圖例高度 mRenderer.setChartTitle("餅圖樣本");// 設定餅表徵圖題 mRenderer.setChartTitleTextSize(14);// 設定餅表徵圖題大小 |
2. 構建資料來源CategorySeries
for (int i = 0; i < data.length; i++) VALUE += data[i]; for (int i = 0; i < data.length; i++) { mSeries.add("樣本 " + (i + 1), data[i] / VALUE);// 設定種類名稱和對應的數值,前面是(key,value)鍵值對 SimpleSeriesRenderer renderer = new SimpleSeriesRenderer(); if (i < COLORS.length) { renderer.setColor(COLORS[i]);// 設定描繪器的顏色 } else { renderer.setColor(getRandomColor());// 設定描繪器的顏色 } renderer.setChartValuesFormat(NumberFormat.getPercentInstance());// 設定百分比 mRenderer.setChartTitleTextSize(14);// 設定餅表徵圖題大小 mRenderer.addSeriesRenderer(renderer);// 將最新的描繪器添加到DefaultRenderer中 } |
3. 通過ChartFactory擷取餅圖
mChartView = ChartFactory.getPieChartView(getApplicationContext(), mSeries, mRenderer);// 構建mChartView mRenderer.setClickEnabled(true);// 允許點擊事件 mChartView.setOnClickListener(new View.OnClickListener() {// 具體內容 } |
運行:
code
package com.qiuzhping.achart;import java.text.NumberFormat;import java.util.Random;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.model.CategorySeries;import org.achartengine.model.SeriesSelection;import org.achartengine.renderer.DefaultRenderer;import org.achartengine.renderer.SimpleSeriesRenderer;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.LinearLayout;import android.widget.Toast;/** * @項目名稱:AChart * @類名稱:PieChartBuilder * @作者:Qiuzhping * @時間:2014-1-15下午11:20:48 * @作用 :構建餅圖,併產生與使用者互動,點擊對應的地區能正確顯示資訊 */public class PieChartBuilder extends Activity {private static int[] COLORS = new int[] { Color.RED, Color.GREEN,Color.BLUE, Color.MAGENTA, Color.CYAN, Color.YELLOW, Color.DKGRAY };double data[] = new double[] { 20, 30, 40, 50, 60, 70, 80, 90, 100 };private CategorySeries mSeries = new CategorySeries("");// PieChart的DataSet// 其實就是一些索引值對,跟Map使用方法差不多private DefaultRenderer mRenderer = new DefaultRenderer();// PieChart的主要描繪器private GraphicalView mChartView;// 用來顯示PieChart 需要在設定檔Manifest中添加// <activity// android:name="org.achartengine.GraphicalActivity"// />private LinearLayout mLinear;private static double VALUE = 0;// 總數@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.xy_chart);mLinear = (LinearLayout) findViewById(R.id.chart);mLinear.setBackgroundColor(Color.BLACK);mRenderer.setZoomButtonsVisible(true);// 顯示放大縮小功能按鈕mRenderer.setStartAngle(180);// 設定為水平開始mRenderer.setDisplayValues(true);// 顯示資料mRenderer.setFitLegend(true);// 設定是否顯示圖例mRenderer.setLegendTextSize(10);// 設定圖例字型大小mRenderer.setLegendHeight(10);// 設定圖例高度mRenderer.setChartTitle("餅圖樣本");// 設定餅表徵圖題for (int i = 0; i < data.length; i++)VALUE += data[i];for (int i = 0; i < data.length; i++) {mSeries.add("樣本 " + (i + 1), data[i] / VALUE);// 設定種類名稱和對應的數值,前面是(key,value)索引值對SimpleSeriesRenderer renderer = new SimpleSeriesRenderer();if (i < COLORS.length) {renderer.setColor(COLORS[i]);// 設定描繪器的顏色} else {renderer.setColor(getRandomColor());// 設定描繪器的顏色}renderer.setChartValuesFormat(NumberFormat.getPercentInstance());// 設定百分比mRenderer.setChartTitleTextSize(14);// 設定餅表徵圖題大小mRenderer.addSeriesRenderer(renderer);// 將最新的描繪器添加到DefaultRenderer中}if (mChartView == null) {// 為空白需要從ChartFactory擷取PieChartViewmChartView = ChartFactory.getPieChartView(getApplicationContext(),mSeries, mRenderer);// 構建mChartViewmRenderer.setClickEnabled(true);// 允許點擊事件mChartView.setOnClickListener(new View.OnClickListener() {// 具體內容@Overridepublic void onClick(View v) {SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();// 擷取當前的類別和指標if (seriesSelection == null) {Toast.makeText(getApplicationContext(),"您未選擇資料", Toast.LENGTH_SHORT).show();} else {for (int i = 0; i < mSeries.getItemCount(); i++) {mRenderer.getSeriesRendererAt(i).setHighlighted(i == seriesSelection.getPointIndex());}mChartView.repaint();Toast.makeText(getApplicationContext(),"您選擇的是第"+ (seriesSelection.getPointIndex() + 1)+ " 項 "+ " 百分比為 "+ NumberFormat.getPercentInstance().format(seriesSelection.getValue()),Toast.LENGTH_SHORT).show();}}});mLinear.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));} else {mChartView.repaint();}}private int getRandomColor() {// 分別產生RBG數值Random random = new Random();int R = random.nextInt(255);int G = random.nextInt(255);int B = random.nextInt(255);return Color.rgb(R, G, B);}}
對應的項目源碼:http://download.csdn.net/detail/qiu_11/6853469
待續.......
CombinedXYChart(組合統計圖)