有很多種實現的方法,我就把我寫的一個例子直接拿出來吧= ,嘿嘿其實也是當時參考別人的(自己的圖。多點的是上半部分的,下面的那個是跟X軸對應點數的)
import java.util.ArrayList;import java.util.List;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chart.PointStyle;import org.achartengine.chart.BarChart.Type;import org.achartengine.renderer.SimpleSeriesRenderer;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;import android.content.Context;import android.content.Intent;import android.graphics.Color;import android.graphics.Paint.Align;import android.view.View;public class WS_zhexian extends AbstractDemoChart {public String getName() {return "TestAChart";}public String getDesc() {return "Test";}public GraphicalView CreateView(Context context){String[] titles = new String[] { "COD達標率 ", "氨氮達標率"};// x軸的值List<double[]> x = new ArrayList<double[]>();for (int i = 0; i < titles.length; i++) {x.add(new double[] {1,2,3,4,5,6,7,8,9}); //從X周的 0算起來 總共有幾個點}// y軸的值List<double[]> values = new ArrayList<double[]>();values.add(new double[] { 10.3, 12.5, 13.8, 24.5, 30.4, 40.4, 50.4, 55.5, 60.6});values.add(new double[] { 10, 15.6, 20.5, 18.6, 25.7, 30.6, 44.5, 55.5 ,64.8});int[] colors = new int[] { Color.BLUE, Color.GREEN};PointStyle[] styles = new PointStyle[] { PointStyle.POINT,PointStyle.POINT };XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);int length = renderer.getSeriesRendererCount();for (int i = 0; i < length; i++) {((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);}renderer.setBackgroundColor(Color.WHITE);renderer.setApplyBackgroundColor(true);renderer.setFitLegend(true);// 圖表與螢幕四邊的間距顏色renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3));renderer.setChartTitleTextSize(30);renderer.setAxisTitleTextSize(10);// renderer.setLegendHeight(50);renderer.setLegendTextSize(10); // 圖例文字的大小--下面分類的字型大小renderer.setMargins(new int[] { 50, 50, 20, 30 }); // 圖離上做下右的間距,貌似沒用// x、y軸上刻度顏色renderer.setXLabelsColor(Color.BLACK);renderer.setYLabelsColor(0, Color.BLACK);setChartSettings(renderer, "", "","", 1, 9 , 0, 90, Color.BLACK, Color.BLACK);// 軸上數位數量renderer.setXLabels(0);renderer.setYLabels(9);/** * 本項目 - 傳入 第一個點 為 X軸的0座標 為上一天的點數,所以不能為0 , 第2個點位當天點數 */ renderer.addXTextLabel(2, "6月1號"); renderer.addXTextLabel(3, "6月2號"); renderer.addXTextLabel(4, "6月3號"); renderer.addXTextLabel(5, "6月4號"); renderer.addXTextLabel(6, "6月5號"); renderer.addXTextLabel(7, "6月6號"); renderer.addXTextLabel(8, "6月7號"); renderer.addXTextLabel(9, "6月8號"); renderer.setShowGrid(true); // 是否顯示網格 renderer.setXLabelsAlign( Align.RIGHT); renderer.setYLabelsAlign(Align.RIGHT); renderer.setPanEnabled(false); //圖表是否可以移動 renderer.setZoomEnabled(true); //圖表是否可以縮放 renderer.setLegendHeight(100); // 表徵圖文字距離底邊的高度 renderer.setZoomButtonsVisible(false); // 設定放大縮小按鈕是否可見GraphicalView view= ChartFactory.getLineChartView(context, buildDataset(titles, x, values), renderer);return view; //返回View對象}@Overridepublic Intent execute(Context context) {// TODO Auto-generated method stubreturn null;}}
也可以返回 intent對象
Intent intent = ChartFactory.getLineChartIntent(context,buildDataset(titles, x, values), renderer,"Average temperature");
然後另外一個類得到intent跳轉進來就好了呢
intent = new zhexian_AChart_quandian().execute(this); startActivity(intent);
得到View對象後在另外一個你自己定義的布局中顯示就OK了:
//-------------------------------------------------------------------------------------------------------------- // ------------------ 調用這個類的方法後 會返回1個 View對象,這樣你就可以把這個View放到你自己的布局中啦,比如:--- //---------------------------------------------------------------------------------------------------------------- LinearLayout line1 = (LinearLayout) findViewById(R.id.zhexian); GraphicalView lineView1 = new AAMy_zhexian().CreateView(this); line1.addView(lineView1, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
上面的是 跟 X軸對應點數的, 是的 下半部分。
下面的是 跟X軸多點的 ,是的上半部分。
import java.util.ArrayList;import java.util.List;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chart.PointStyle;import org.achartengine.chart.BarChart.Type;import org.achartengine.renderer.SimpleSeriesRenderer;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;import android.content.Context;import android.content.Intent;import android.graphics.Color;import android.graphics.Paint.Align;import android.view.View;
// 這個是 一天記錄 2個資料的 所以8天就 - 16個點(當時要求第一個點 從中間開始 暈- -,當然可以自己設定從 0.0開始)public class AAMy_zhexian extends AbstractDemoChart {public String getName() {return "TestAChart";}public String getDesc() {return "*************TestAChart***************";}
public GraphicalView CreateView(Context context){// 每個item的titleString[] titles = new String[] { "COD達標率 ", "氨氮達標率", "汙染物排放濃度 COD","Skiathos" };// x軸的值List<double[]> x = new ArrayList<double[]>();for (int i = 0; i < titles.length; i++) {x.add(new double[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}); //從X周的 0算起來 總共有幾個點}// y軸的值List<double[]> values = new ArrayList<double[]>();values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,26.1,12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,26.1});values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26 , 10, 10, 12, 15, 20, 24, 26, 26});values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24 ,5, 5.3, 8, 12, 17, 22, 24.2, 24 });values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25 , 9, 10, 11, 15, 19, 23, 26, 25});int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN,Color.YELLOW };// 點的樣式 DIAMOND正方形 TRIANGLE 三角形 SQUARE 圓形PointStyle[] styles = new PointStyle[] { PointStyle.POINT,PointStyle.POINT, PointStyle.POINT, PointStyle.POINT };//Renderer 就是渲染器,設定圖表顯示的一些特徵,比表的大小,標題,座標軸的顏色,背景顏色等XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);int length = renderer.getSeriesRendererCount();// 點是空心還是實心for (int i = 0; i < length; i++) {((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);}// 圖表部分的背景顏色//renderer.setBackgroundColor(Color.parseColor("#f3f3f3"));renderer.setBackgroundColor(Color.WHITE);renderer.setApplyBackgroundColor(true);//設定顯示點上的值//renderer.setDisplayChartValues(true);//renderer.setChartValuesTextSize(18);renderer.setFitLegend(true);//調整合適的位置// 圖表與螢幕四邊的間距顏色renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3));renderer.setChartTitleTextSize(30);renderer.setAxisTitleTextSize(10);// renderer.setLegendHeight(50);renderer.setLegendTextSize(10); // 圖例文字的大小--下面分類的字型大小renderer.setMargins(new int[] { 50, 50, 20, 30 }); // 圖離上做下右的間距,貌似沒用// x、y軸上刻度顏色renderer.setXLabelsColor(Color.BLACK);renderer.setYLabelsColor(0, Color.BLACK);// 最後兩個參數代表軸的顏色和軸標籤的顏色 1-9 X是 1到9 0-90 Y 0到90//setChartSettings(renderer, "表徵圖上方的文字", "表徵圖下方的文字",//"表徵圖左側的文字", 0.0, 16, 0, 90, Color.BLACK, Color.BLACK);setChartSettings(renderer, "", "","", 0.0, 16, 0, 90, Color.BLACK, Color.BLACK); // 軸上數位數量 renderer.setXLabels(0); renderer.setYLabels(9); // 自訂橫軸 X的標識 renderer.addXTextLabel(2, "6月1號"); renderer.addXTextLabel(4, "6月2號"); renderer.addXTextLabel(6, "6月3號"); renderer.addXTextLabel(8, "6月4號"); renderer.addXTextLabel(10, "6月5號"); renderer.addXTextLabel(12, "6月6號"); renderer.addXTextLabel(14, "6月7號"); renderer.addXTextLabel(16, "6月8號"); // renderer.setBarSpacing(1); // 是否顯示網格 // renderer.setPanLimits(new double[] { -10, 20, -10, 40 }); //設定拖動時X軸Y軸允許的最大值最小值. // renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });//設定放大縮小時X軸Y軸允許的最大最小值. renderer.setShowGrid(true); // x或y軸上數位方向,相反的。 renderer.setXLabelsAlign( Align.RIGHT); renderer.setYLabelsAlign(Align.RIGHT); renderer.setPanEnabled(false); //圖表是否可以移動 renderer.setZoomEnabled(true); //圖表是否可以縮放 renderer.setLegendHeight(100); // 表徵圖文字距離底邊的高度 //renderer.setZoomEnabled(true, false); 拖動的時候 Y軸不動 //renderer.setPanEnabled(true, false); 拖動的時候 X軸不動 renderer.setZoomButtonsVisible(false); // 設定放大縮小按鈕是否可見 // renderer.setPanLimits(new double[] { -10, 20, -10, 40 }); // renderer.setZoomLimits(new double[] { -10, 20, -10, 40 }); /** 1、ChartFactory 傳入Renderer,Dataset的參數, 然後用getXXXChartIntent(Context context,XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset)方法進行圖表的顯示2、XYMutilpleSeriesRenderer 用於進行繪製的設定,添加的Renderer對象,用於定義繪製的點集合設定,注意數量要和Dataset添加的XYseries一致!!! */ //Intent intent = ChartFactory.getLineChartIntent(context,//buildDataset(titles, x, values), renderer,//"Average temperature");//ChartFactory.getBarChartView(context, dataset, renderer, type); //把圖表變成 View的方法, GraphicalView view= ChartFactory.getLineChartView(context, buildDataset(titles, x, values), renderer);return view;}@Overridepublic Intent execute(Context context) {// TODO Auto-generated method stubreturn null;}
}