運用開源 achartengine 繪製android端的折線圖片,多表顯示

來源:互聯網
上載者:User

有很多種實現的方法,我就把我寫的一個例子直接拿出來吧= ,嘿嘿其實也是當時參考別人的(自己的圖。多點的是上半部分的,下面的那個是跟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;}
}
       
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.