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 }
图表标题我想大部分人都懂的,自己加就 好了