最近項目上要使用圖表,便開始在網上找各種圖表架包,好看的都是收費的,最后還是決定用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,樣式我只能提供這么多了.一句話,不管什么視圖,流程都是這個流程.
如果有啥不對的,歡迎指出,不能把錯的分享給別人了,嘿嘿.