1. 程式人生 > >AChartEngine畫折線圖 的屬性設定(個人精華版)

AChartEngine畫折線圖 的屬性設定(個人精華版)

個人觀點:如果用第三方的結構,只能做出來一般的圖,別指望能夠多麼炫酷和隨心所欲。除非你看原始碼。看原始碼很重要。

AChartEngine是為Android應用開發而設計的繪圖工具庫,可用於繪製各種圖表,下載地址:
http://code.google.com/p/achartengine/
你可以下載到最新的jar包,demo,以及api說明文件。
同樣,在source欄,你可以用svn下載最新的原始碼, svn命令是
svn checkouthttp://achartengine.googlecode.com/svn/trunk/ achartengine-read-only

最基本的屬性:

1.    修改背景色或設定背景圖片 背景色設定需要設定兩項:setMarginsColor(設定四邊顏色)以及setBackgroundColor(設定中間背景色) 設定背景圖片:         http://blog.csdn.net/kmyhy/article/details/6590294 2.    setAxisTitleTextSize(16);// 設定座標軸標題文字大小 3.    setChartTitleTextSize(20); // 設定圖表標題文字大小 4.    setLabelsTextSize(15); // 設定軸標籤文字大小 5.    setLegendTextSize(15); // 設定圖例文字大小 6.    renderer.setChartTitle( "個人收支表");//設定柱圖名稱 7.    renderer.setXTitle( "名單" );//設定X軸名稱 8.    renderer.setYTitle( "金額" );//設定Y軸名稱 9.    renderer.setXAxisMin(0.5);//設定X軸的最小值為0.5 10.  renderer.setXAxisMax(5.5);//設定X軸的最大值為5 11.  renderer.setYAxisMin(0);//設定Y軸的最小值為0 12.  renderer.setYAxisMax(500);//設定Y軸最大值為500 13.  renderer.setDisplayChartValues(true);//設定是否在柱體上方顯示值 14.  renderer.setShowGrid(true);//設定是否在圖表中顯示網格 15.  renderer.setXLabels(0);//設定X軸顯示的刻度標籤的個數 16.  如果想要在X軸顯示自定義的標籤,那麼首先要設定renderer.setXLabels(0);其次我們要renderer.addTextLabel()迴圈新增 17.  renderer.setXLabelsAlign(Align.RIGHT);//設定刻度線與X軸之間的相對位置關係 18.  renderer.setYLabelsAlign(Align.RIGHT);//設定刻度線與Y軸之間的相對位置關係 19.  renderer.setZoomButtonsVisible(true);//設定可以縮放 20.  renderer.setPanLimits(newdouble[] { 0, 20, 0, 140 });//設定拉動的範圍 21.  renderer.setZoomLimits(newdouble[] { 0.5, 20, 1, 150 });//設定縮放的範圍 22.  renderer.setRange(newdouble[]{0d, 5d, 0d, 100d}); //設定chart的檢視範圍 23.  renderer.setFitLegend(true);// 調整合適的位置 24.  renderer.setClickEnabled(true)//設定是否可以滑動及放大縮小; 25.  Dataset和Render引數介紹:        http://blog.csdn.net/lk_blog/article/details/7645661
26.ChartView.repaint();是重新繪圖的命令(@
FireLion提供)
27.關於AChartEngine的點選事件,雙擊事件,滑動事件均可以用自定義事件解決,但是需要注意的是先設定renderer.setClickEnabled(false);

28.若是新增圖形後變形,可以設定 renderer.setInScroll(true);解決,來自於@gupengno1
29.renderer.setGridColor();//設定網格顏色
30.renderer.setAxesColor();//設定座標軸顏色

二、這一篇更加誠懇

achartengine.achartengine使用起來還算好,就是修改樣式很煩.下面就分享下開發經驗吧.
所有的chart都分兩塊,一塊是Renderer(如XYMultipleSeriesRenderer,我的理解是,這個renderer為檢視render的模板,就是你想用什麼圖示,一個圖圖表基本分2層,這個是最下面一層),一塊是Dataset(如XYMultipleSeriesDataset,用於對檢視數值的處理).



這邊我就拿折線圖舉例吧.
首先需要

        XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();//建立你需要的圖表最下面的圖層
        XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();//建立你需要在圖層上顯示的具體內容的圖層
        mRenderer.addSeriesRenderer(seriesRenderer);//新增進去

        XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset()//建立資料層

        XYSeries series = new XYSeries("標題");//建立具體的資料層
        series .add(x, y);//新增資料,一般都是for迴圈資料不斷操作這一步新增的
        mDataset.addSeries(series);

      然後呼叫ChartFactory.getLineChartIntent(context, mDataset, mRenderer),得到一個Intent型別的intent,startActivity(intent)就能得到圖表了.這邊需要在AndroidManifest.xml加上<activity android:name="org.achartengine.GraphicalActivity" />.這邊是跳介面檢視圖表,是全屏的.ChartFactory可以得到很多檢視,ChartFactory.getBarChartIntent(context, dataset, renderer, type, activityTitle)就可以得到一個柱狀圖.以此類推啊.

有時候專案中開發,需要在介面的某一塊展示檢視,這時候我們可以通過 ChartFactory.getLineChartView(context, mDataset, mRenderer)得到一個GraphicalView型別的檢視.(這邊就不要需要在AndroidManifest.xml加上<activity android:name="org.achartengine.GraphicalActivity" />.)



其實圖表的使用流程就是這樣.但要做一個自己想要的檢視,就需要設定mRenderer 的樣式,seriesRenderer 的樣式.


mRenderer樣式設定:
        mRenderer.setShowAxes(false);//設定是否需要顯示座標軸
        mRenderer.setXAxisMin(1.3d);//設定X軸最小值
        mRenderer.setXAxisMax(10d);//設定X軸最大值

        mRenderer.setYAxisMin(0d); //設定Y軸最小值
        mRenderer.setYAxisMax(maxY + maxY / 6); // 設定Y軸最大值
        mRenderer.setChartTitleTextSize(0);//設定圖表標題字型大小,我這邊設定0是把標題隱藏掉
        mRenderer.setYLabels(7);//設定Y軸標籤數

        mRenderer.setExternalZoomEnabled(true);//設定是否可以縮放
        mRenderer.setZoomInLimitY(maxY + maxY / 6);//設定Y軸最大縮放限
        mRenderer.setZoomInLimitX(5);//設定X軸最大縮放限
        mRenderer.setPanEnabled(true, false);//設定滑動,這邊是橫向可以滑動,豎向不可滑動
        mRenderer.setXLabels(XLabel.size() - 1);//設定X標籤數量
        mRenderer.setXLabelsPadding(200);//設定標籤的間距
        mRenderer.setXLabelsAngle(-45f);//設定標籤傾斜度
        for (int i = 0; i < XLabel.size(); i++)
        {
            mRenderer.addXTextLabel(i, XLabel.get(i));//這邊是自定義自己的標籤,顯示自己想要的X軸的標籤,需要注意的是需要setXLabels(0)放在標籤重疊(就是自定義的標籤與圖表預設的標籤)
        }      


        mRenderer.setPanLimits(new double[] {0, (XLabel.size()) * 2, 0, maxY});//設定滑動範圍,這邊我很好奇他的單位,一直有點小問題
        mRenderer.setAxesColor(context.getResources().getColor(R.color.text_hui));//設定數軸的顏色
        mRenderer.setGridColor(context.getResources().getColor(R.color.text_hui999999)); //設定網格的顏色   
        mRenderer.setShowGrid(true); /設定是否需要顯示網格
        mRenderer.setYTitle(label);//設定Y軸標題
        mRenderer.setLabelsColor(Color.BLACK);//設定標籤顏色
        mRenderer.setYLabelsAlign(Align.LEFT, 0);//設定標籤居Y軸的方向
        mRenderer.setAxisTitleTextSize(20);
        mRenderer.setYLabelsColor(0, context.getResources().getColor(R.color.text_hui));        mRenderer.setLabelsTextSize(14);
        mRenderer.setZoomLimits(new double[] {0, maxX * 5, 0, maxY + maxY / 6});//設定縮放限制,setZoomInLimitY等一樣
        mRenderer.setXLabelsColor(context.getResources().getColor(R.color.text_hui));
        mRenderer.setMarginsColor(context.getResources().getColor(R.color.chart_bg));//設定畫布距數軸之間的顏色


        mRenderer.setZoomRate(1.4f);//放大幾倍


seriesRenderer設定部分:


        seriesRenderer.setFillBelowLine(false); // 設定折線下方是否填充
        seriesRenderer.setFillBelowLineColor(context.getResources().getColor(R.color.chart_content_color));//填充色
        seriesRenderer.setPointStyle(PointStyle.CIRCLE); /折線點的樣式
        seriesRenderer.setPointStrokeWidth(5f);//折線點的大小
        seriesRenderer.setDisplayChartValues(true);//設定顯示折線的點對應的值
        seriesRenderer.setChartValuesTextSize(16);
        seriesRenderer.setColor(Color.BLUE);
        seriesRenderer.setChartValuesSpacing(7);
        seriesRenderer.setLineWidth(3.0f)//折線寬度
        seriesRenderer.setDisplayChartValuesDistance(5);///折線點的值距離折線點的距離
        seriesRenderer.setChartValuesTextAlign(Align.RIGHT);
        DecimalFormat df1 = new DecimalFormat(".00");
        seriesRenderer.setChartValuesFormat(df1);//設定折線點的值的格式,顯示小數點後2位

1.顯示折線上點的數值

  render.setDisplayChartValues(true) ; 
2.設定 線的粗細? 

  XYSeriesRenderer.setLineWidth(float lineWidth)方法 

 3、設定圖表中曲線本身的樣式,包括顏色、點的大小以及線的粗細等
     XYSeriesRenderer r = new XYSeriesRenderer();
     r.setColor(color);
     r.setPointStyle(style);
     r.setFillPoints(fill);//點是充滿的
     r.setLineWidth(3);
     renderer.addSeriesRenderer(r);

4、

雖然這個帖子很久了 但是作為一個程式設計師 也許其他人也會找到這裡 我把找了2天才找到的解決方法貼上來
//renderer.setLabelsColor(Color.RED);//座標標題顏色 不是刻度
renderer.setXLabelsColor(Color.BLACK);//設定X軸刻度顏色
renderer.setYLabelsColor(0, Color.BLACK);//設定Y軸刻度顏色

5、

android圖示框架achartengine中的折現圖點的顏色怎麼設定,要求點的顏色不能和折線的顏色一樣。

你好,有下面兩種方法可以修改,請參考。

1、需要修改org.achartengine.chart.ScatterChart類中的drawSeries方法,在畫點之前對畫筆的顏色進行設定,新增如下程式碼:
paint.setColor(Color.WHITE);//可以換成你想要的顏色
2、為了可擴充套件性考慮,可以新增設定點顏色的介面。修改org.achartengine.renderer.XYSeriesRenderer類,在其中新增一個屬性pointColor,設定一個預設值,並新增set、get方法。這樣可以在畫圖前呼叫setPointColor方法設定點的顏色,在ScatterChart類中繪製點之前呼叫getPointColor方法獲取點的顏色。

6、最高需求,看這個帖子,超級厲害,需要看原始碼 http://www.tuicool.com/articles/VR3mmq