關於achartengine的使用一些小經驗


最近項目上要使用圖表,便開始在網上找各種圖表架包,好看的都是收費的,最后還是決定用google的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位


大體就是這樣,這邊舉例的是折線圖,其實柱狀圖也是這樣的流程.可以參考demo,樣式我只能提供這么多了.一句話,不管什么視圖,流程都是這個流程.
如果有啥不對的,歡迎指出,不能把錯的分享給別人了,嘿嘿.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM