android achart 柱状图图表

android 使用开源项目achartengine-1.0.0,绘制图表。今天随记写了一个柱状图demo,先看下效果

数据是随机的。

好了 看下代码吧。

布局文件比较简单:activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"/>
    <LinearLayout
        android:id="@+id/chartlinear"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" />
</RelativeLayout>

MainActivity中的代码:

  1 package com.liu.achartdemo;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.Random;
  6 
  7 import org.achartengine.ChartFactory;
  8 import org.achartengine.GraphicalView;
  9 import org.achartengine.chart.PointStyle;
 10 import org.achartengine.model.CategorySeries;
 11 import org.achartengine.model.XYMultipleSeriesDataset;
 12 import org.achartengine.renderer.SimpleSeriesRenderer;
 13 import org.achartengine.renderer.XYMultipleSeriesRenderer;
 14 
 15 import android.os.Bundle;
 16 import android.app.Activity;
 17 import android.graphics.Color;
 18 import android.graphics.Paint.Align;
 19 import android.view.Menu;
 20 import android.view.WindowManager.LayoutParams;
 21 import android.widget.LinearLayout;
 22 
 23 public class MainActivity extends Activity {
 24     private LinearLayout layout;
 25     private List<String[]> x = new ArrayList<String[]>(); // x--时间坐标值
 26     private List<int[]> y = new ArrayList<int[]>();// Y--订单数值
 27     private XYMultipleSeriesDataset dataset;
 28     String[] title = { "柱状图demo" };
 29     private String[]days = new String[12];
 30     private int[]sales = new int[12];
 31     @SuppressWarnings("deprecation")
 32     @Override    
 33     protected void onCreate(Bundle savedInstanceState) {
 34         super.onCreate(savedInstanceState);
 35         setContentView(R.layout.activity_main);
 36         initView();
 37         Random rom = new Random();
 38         for(int i=1;i<13;i++)
 39         {
 40             days[i-1] = i + "月";
 41             sales[i-1] =rom.nextInt(5)*i;
 42         }
 43         
 44         
 45         x.add(days);
 46         y.add(sales);
 47         dataset = buildDataset(title, x, y);
 48         int[] colors = new int[] {Color.parseColor("#008000")};
 49         PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE };
 50         XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles, true);
 51 
 52         renderer.setMargins(new int[] { 20, 30, 10, 0 });
 53         setChartSettings(renderer, "", "", "Y--成交订单金额", 0, 20,Color.RED, Color.RED);                        
 54         GraphicalView v = ChartFactory.getBarChartView(MainActivity.this, dataset, renderer, null);
 55         //views.add(v);
 56         //v.setVisibility(View.VISIBLE);
 57         layout.addView(v,new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));    
 58         
 59     }
 60     
 61     private void initView() {
 62         // TODO Auto-generated method stub
 63         layout = (LinearLayout)findViewById(R.id.chartlinear);//放置统计图
 64     }
 65 
 66     @Override
 67     public boolean onCreateOptionsMenu(Menu menu) {
 68         // Inflate the menu; this adds items to the action bar if it is present.
 69         getMenuInflater().inflate(R.menu.activity_main, menu);
 70         return true;
 71     }
 72 
 73     
 74     
 75     private XYMultipleSeriesRenderer buildRenderer(int[] colors,PointStyle[] styles, boolean b) {
 76         // TODO Auto-generated method stub
 77         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
 78         int length = colors.length;
 79         for (int i = 0; i < length; i++) {
 80             SimpleSeriesRenderer r = new SimpleSeriesRenderer();
 81             r.setColor(colors[i]);
 82             r.setChartValuesSpacing((float) 0.5);
 83 //            r.setPointStyle(styles[i]);
 84 //            r.setFillPoints(b);
 85             renderer.addSeriesRenderer(r);
 86         }
 87         return renderer;
 88     }
 89 
 90     @SuppressWarnings("deprecation")
 91     private void setChartSettings(XYMultipleSeriesRenderer renderer,
 92             String title, String xTitle, String yTitle, 
 93             int yMin, double yMax, int axesColor, int labelsColor) {
 94         // TODO Auto-generated method stub
 95         renderer.setChartTitle(title);
 96         renderer.setXTitle(xTitle);
 97         renderer.setYTitle(yTitle);
 98         renderer.setYAxisMin(yMin);
 99         renderer.setYAxisMax(yMax);
100         renderer.setAxesColor(axesColor);
101         renderer.setLabelsColor(labelsColor);
102         renderer.setXLabels(7);
103         renderer.setYLabels(20);
104         renderer.setXLabelsColor(Color.BLACK);//X轴坐标颜色
105         renderer.setYLabelsColor(0, Color.BLACK);
106         renderer.setYLabelsAlign(Align.LEFT);
107         //renderer.setPanEnabled(false, false);//设置xy轴不会因用户划动屏幕而移动
108         renderer.setMarginsColor(Color.WHITE);//设置四周背景色
109         renderer.setBackgroundColor(Color.WHITE);//设置背景
110         renderer.setApplyBackgroundColor(true);
111         renderer.setDisplayChartValues(true);//设置顶部显示数据
112         renderer.setZoomButtonsVisible(true);//设置可以缩放
113         renderer.setBarSpacing(0.2);//设置柱子间距
114         renderer.setFitLegend(true);// 调整合适的位置
115         renderer.setXAxisMin(1);
116         renderer.setXAxisMax(12);
117         renderer.setXLabels(0);//设置X轴不显示数字
118         
119         for(int i=1;i<13;i++){
120             renderer.addXTextLabel((double)i, days[i-1]);
121         }
122         
123     }
124 
125     private XYMultipleSeriesDataset buildDataset(String[] title,
126             List<String[]> x, List<int[]> y) {
127         // TODO Auto-generated method stub
128         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
129         
130         //XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
131         int length = title.length; 
132         for (int i = 0; i < length; i++) {
133             CategorySeries series = new CategorySeries(title[i]); 
134             String[] xV = (String[]) x.get(i); //获得x轴数据
135             int[] yV = (int[]) y.get(i);
136             int seriesLength = xV.length; 
137             for (int k = 0; k < seriesLength; k++) 
138             {
139                 //renderer.addXTextLabel(k, xV[k].toString());
140                 series.add(yV[k]);
141             }
142             dataset.addSeries(series.toXYSeries());
143         }
144         return dataset;
145     }
146 }

图表标题我想大部分人都懂的,自己加就 好了

posted @ 2012-12-07 21:36  迷途的天空  阅读(841)  评论(1编辑  收藏  举报