AChartEngine應用之BarChart(柱形圖)
接著上文,構建柱形圖的步驟和構建餅圖的步驟一樣,主要分為以下三步,還需要在項目中引入AChartEngine依賴jar包,在Manifest中添加:<activityandroid:name="org.achartengine.GraphicalActivity" />
1.設置XYMultipleSeriesRenderer主要描繪器
|
XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);// 柱形圖顏色設置 setChartSettings(renderer, "柱形圖示例", "月份", "數量", 0.5, 12.5, 0, 2400, Color.GRAY, Color.LTGRAY);// 設置柱形圖標題,橫軸(X軸)、縱軸(Y軸)、最小的伸所刻度、最大的伸所刻度 renderer.getSeriesRendererAt(0).setDisplayChartValues(true);// 在第0條柱形圖上顯示數據 renderer.getSeriesRendererAt(1).setDisplayChartValues(true);// 在第1條柱形圖上顯示數據 renderer.setXLabels(12); renderer.setYLabels(10); renderer.setXLabelsAlign(Align.LEFT);// 數據從左到右顯示 renderer.setYLabelsAlign(Align.LEFT); renderer.setPanEnabled(true, false); renderer.setZoomEnabled(true); renderer.setZoomButtonsVisible(true);// 顯示放大縮小功能按鈕 renderer.setZoomRate(1.1f); renderer.setBarSpacing(0.5f);// 柱形圖間隔 |
2.構建數據源XYMultipleSeriesDataset
|
protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) {//柱形圖的數據源和餅圖差不多,也是由一些鍵值對組成 XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); int length = titles.length; for (int i = 0; i < length; i++) { CategorySeries series = new CategorySeries(titles[i]); double[] v = values.get(i); int seriesLength = v.length; for (int k = 0; k < seriesLength; k++) { series.add(v[k]); } dataset.addSeries(series.toXYSeries()); } return dataset; } |
3.通過ChartFactory獲取柱形圖
|
mChartView = ChartFactory.getBarChartView(getApplicationContext(), buildBarDataset(titles, values), renderer, Type.DEFAULT); renderer.setClickEnabled(true); //renderer.set mLinear.addView(mChartView, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); |
運行效果圖:
code
package com.qiuzhping.achart;
import java.util.ArrayList;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
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.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class BarChartBuilder extends Activity {
private GraphicalView mChartView;
public void back(View v) {
Log.i("qiuzhping", "back onClick");
Intent intent = new Intent();
intent.setClass(BarChartBuilder.this, MainActivity.class);
startActivity(intent);
BarChartBuilder.this.finish();
}
protected void setChartSettings(XYMultipleSeriesRenderer renderer,
String title, String xTitle, String yTitle, double xMin,
double xMax, double yMin, double yMax, int axesColor,
int labelsColor) {
renderer.setChartTitle(title);
renderer.setXTitle(xTitle);
renderer.setYTitle(yTitle);
renderer.setXAxisMin(xMin);
renderer.setXAxisMax(xMax);
renderer.setYAxisMin(yMin);
renderer.setYAxisMax(yMax);
renderer.setAxesColor(axesColor);
renderer.setLabelsColor(labelsColor);
}
protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
int length = colors.length;
for (int i = 0; i < length; i++) {
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(colors[i]);
renderer.addSeriesRenderer(r);
}
return renderer;
}
protected XYMultipleSeriesDataset buildBarDataset(String[] titles,
List<double[]> values) {//柱形圖的數據源和餅圖差不多,也是由一些鍵值對組成
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
int length = titles.length;
for (int i = 0; i < length; i++) {
CategorySeries series = new CategorySeries(titles[i]);
double[] v = values.get(i);
int seriesLength = v.length;
for (int k = 0; k < seriesLength; k++) {
series.add(v[k]);
}
dataset.addSeries(series.toXYSeries());
}
return dataset;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xy_chart);
LinearLayout mLinear = (LinearLayout) findViewById(R.id.chart);
mLinear.setBackgroundColor(Color.BLACK);
String[] titles = new String[] { "2012", "2013" };
List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { 1423, 1230, 1424, 1524, 1590, 1920, 2203,
2120, 1950, 1550, 1260, 1400 });
values.add(new double[] { 523, 730, 924, 1054, 790, 920, 1200, 1100,
950, 1500, 1100, 1500 });
int[] colors = new int[] { Color.RED, Color.BLUE };
XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);// 柱形圖顏色設置
setChartSettings(renderer, "柱形圖示例", "月份", "數量", 0.5, 12.5, 0, 2400,
Color.GRAY, Color.LTGRAY);// 設置柱形圖標題,橫軸(X軸)、縱軸(Y軸)、最小的伸所刻度、最大的伸所刻度
renderer.getSeriesRendererAt(0).setDisplayChartValues(true);// 在第0條柱形圖上顯示數據
renderer.getSeriesRendererAt(1).setDisplayChartValues(true);// 在第1條柱形圖上顯示數據
renderer.setXLabels(12);
renderer.setYLabels(10);
renderer.setXLabelsAlign(Align.LEFT);// 數據從左到右顯示
renderer.setYLabelsAlign(Align.LEFT);
renderer.setPanEnabled(true, false);
renderer.setZoomEnabled(true);
renderer.setZoomButtonsVisible(true);// 顯示放大縮小功能按鈕
renderer.setZoomRate(1.1f);
renderer.setBarSpacing(0.5f);// 柱形圖間隔
if (mChartView == null) {// 構建柱形圖
mChartView = ChartFactory.getBarChartView(getApplicationContext(),
buildBarDataset(titles, values), renderer, Type.DEFAULT);
renderer.setClickEnabled(true);
//renderer.set
mLinear.addView(mChartView, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
} else
mChartView.repaint();
}
}
對應的完整項目:http://download.csdn.net/detail/qiu_11/6854803
未完待續。。。。。
AChartEngine應用系列文章
(二)AChartEngine應用之PieChart(餅圖)
(三)
AChartEngine應用之BarChart(柱形圖)
(四)
AChartEngine應用之PieChart(動態餅圖,允許產生動態數據并顯示)
(五)
AChartEngine應用之LineChart(模擬生命特征值圖)
(六)
AChartEngine應用之LineChart(模擬三角函數sin,cos)
(七) AChartEngine高級應用 CombinedXYChart (組合統計圖)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

