自學安卓和java有一段時間了,畢設用到什麼,就現學什麼,經常看别人部落格,今天還是第一次自己寫部落格。發現學程式設計還是要學會知識點小結,在這之前,也會在筆記本上做筆記,但慢慢發現,這種方式知識點架構太淩亂了,有的時候半天找不到這個知識點在哪本筆記本哪頁紙上,摘抄一些api效率也比較低,也沒有對知識點做更深層次的了解和總結,實作了功能就完事了,但感覺這樣下去不适合長期深遠發展。總之,嘗試換這種部落格總結知識點的方式繼續學習,希望自己堅持下去。對程式媛這行還是蠻喜歡的,因為總有那麼多的好心人,不懂的不會的,百度總是能找到啟發。
廢話不多說,最近畢設用到畫各種圖,使用了achartengine的架構。在看了很多相關部落格的基礎上,按照自己的思路總結下:
寫的比較好的部落格原文位址:
http://blog.csdn.net/shulianghan/article/details/38420197
http://www.cnblogs.com/zhangchaot/p/5892638.html
http://www.tuicool.com/articles/r6zMne
http://www.cnblogs.com/wangfeng520/p/5655767.html
http://blog.csdn.net/lk_blog/article/details/7645661
(1)原理架構
AChartEngine 運作示例圖 : 每個圖表都需要一個資料集 (Dataset) 和 渲染器集合 (Renderer);
-- 資料集 : 又由許多資料組成,
-- 渲染器 : 也由不同的子渲染器組成,
-- 擷取Activity 或 元件 : 圖表工廠 (ChartFactory) 通過調用 資料集 (Dataset) 和 渲染器集合 (Renderer) 可以生成帶圖表的 GraphicalView 或者 GraphicalActivity;
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiIWZ3FyZuBnL6llYClkYvwVbvNmLs92bjlWd05iMn1Wavw1LcpDc0RHaiojIsJye.png!web)
XYSeries類:(x,y)點集 XYMultipleSeriesDataset類:多個 (x,y)組。資料集 3.org.achartengine.renderer DefaultRenderer類:預設渲染器 XYMultipleSeries Renderer類:繼承上類,多XY點渲染器 setZoomButtonVisible(boolean) 放大縮小button SimpleSeries Renderer類 XYSeries Renderer類:繼承上邊, setDisplayChartValues(boolean) setDisplayChartValueDistance(10) 4. org.achartengine GraphicView類:繼承自View類, ChartFactory類:各種圖表集合 5.AbstractDemoChart類:包含建立資料集合和渲染器的一些方法,是一個抽象類 addXYSeries( XYMultipleSeriesDataset,String[],List, List,int scale ):向dataset中加入多組坐标系。 buildDataset( String[],List, List ):傳回dataset對象。
buildRenderer(int[] colors,PointStyle[] ):傳回渲染器執行個體。 setChartSettings:設定坐标系的參數,包括坐标系标題,X軸标題,Y軸标題,X,Y軸最大最小值,顔色。 buildDateDataset( String[],List, List ):傳回X軸是日期的dataset對象。
7.正常用法: ①在layout xml檔案中留一塊LinearLayout用來放view。 ②在相應activity中用findviewbyid指定該layout對象;建立GraphicView對象,獲得 XYMultipleSeriesDataset, XYMultipleSeries Renderer對象,之後設定圖表格式setchartsetting; ③ GraphicView對象=ChartFactory.getLineChartView(context,dataset,renderer)。 ④ LinearLayout.addView( GraphicView對象, new LayoutParams(FILL,FILL) )。
(2)常用的知識點技巧
1、
//自定義X軸的字元串标簽
String[] test = {"液位","壓力","氣耗量","真空度","加氣次數"};
for(int i=;i<;i++){
renderer.addXTextLabel(i+, test[i]);
}
//如果想要在X軸顯示自定義的标簽,那麼首先要設定renderer.setXLabels(0);
//如果不設定為0,那麼所設定的Labels會與原X坐标軸labels重疊
renderer.setXLabels();
for (int color : colors) {
17 SimpleSeriesRenderer r = new SimpleSeriesRenderer();
18 r.setColor(color);
19 renderer.addSeriesRenderer(r);
20 }
int[] colors={Color.BLUE,Color.GREEN,Color.MAGENTA,Color.RED};
2 DefaultRenderer renderer=buildCategoryRenderer(colors);
protected DefaultRenderer buildCategoryRenderer(int[] colors) {
2 DefaultRenderer renderer = new DefaultRenderer();
3
4 renderer.setLegendTextSize(20);//設定左下角表注的文字大小
5 //renderer.setZoomButtonsVisible(true);//設定顯示放大縮小按鈕
6 renderer.setZoomEnabled(false);//設定不允許放大縮小.
7 renderer.setChartTitleTextSize(30);//設定圖表标題的文字大小
8 renderer.setChartTitle("統計結果");//設定圖表的标題 預設是居中頂部顯示
9 renderer.setLabelsTextSize(20);//餅圖上标記文字的字型大小
10 //renderer.setLabelsColor(Color.WHITE);//餅圖上标記文字的顔色
11 renderer.setPanEnabled(false);//設定是否可以平移
12 //renderer.setDisplayValues(true);//是否顯示值
13 renderer.setClickEnabled(true);//設定是否可以被點選
14 renderer.setMargins(new int[] { 20, 30, 15,0 });
15 //margins - an array containing the margin size values, in this order: top, left, bottom, right
16 for (int color : colors) {
17 SimpleSeriesRenderer r = new SimpleSeriesRenderer();
18 r.setColor(color);
19 renderer.addSeriesRenderer(r);
20 }
21 return renderer;
22 }
protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
2 XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
3 renderer.setAxisTitleTextSize(16);
4 renderer.setChartTitleTextSize(20);
5 renderer.setLabelsTextSize(15);
6 renderer.setLegendTextSize(15);
7 int length = colors.length;
8 for (int i = 0; i < length; i++) {
9 SimpleSeriesRenderer r = new SimpleSeriesRenderer();
10 r.setColor(colors[i]);
11 renderer.addSeriesRenderer(r);
12 }
13 return renderer;
14 }
private void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {}
private void setChartSettings(XYMultipleSeriesRenderer renderer,String title, String xTitle, String yTitle,
double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) {}
private XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) {}
private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles , List<double[]> xValues,
List<double[]> yValues, int scale) {}
使用
setChartSettings(renderer, title, "", "", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);
View view = ChartFactory.getLineChartView(this, buildDataset(titles, x, values), renderer);
view.setBackgroundColor(Color.BLACK);
餅狀圖
protected DefaultRenderer buildCategoryRenderer(int[] colors) {}
protected CategorySeries buildCategoryDataset(String title, ArrayList<Information> list) {}
// 餅狀圖文字資訊和對應的百分比
View view = ChartFactory.getPieChartView(this, buildCategoryDataset("Project budget", list), renderer);
柱狀圖
// 描繪器設定
public XYMultipleSeriesRenderer getBarRenderer(ArrayList<Information> informations) {}
private void setChartSettings(XYMultipleSeriesRenderer renderer,ArrayList<Information> informations) {}
// 資料設定
private XYMultipleSeriesDataset getBarDataset( ArrayList<Information> informations) {}
View view = ChartFactory.getBarChartView(this, getBarDataset(list),getBarRenderer(list),
Type.STACKED); // Type.STACKED
部落格位址 http://www.cnblogs.com/zhangchaot/p/5892638.html
http://www.cnblogs.com/huangjialin/p/5613435.html
參考部落格位址:
畫圖achartengine
基于Android便攜式健康監測系統——Android系統開發設計
http://wenku.baidu.com/link?url=mWNBycGTS_sI-c75usVzzQO2ld9Vph4Sz3cGCgd4O-ba78TE-iJLMoQilwha7aoqeq8S-DVBQ5dB_ZkpVwl-0hI7akGNWpzZ_gp6GkhPdqC
Android利用Achartengine實作實時曲線圖
http://blog.csdn.net/lamelias/article/details/41894433
http://www.jizhuomi.com/android/environment/130.html
http://mobile.51cto.com/design-447554.htm
http://blog.csdn.net/eastmoon502136/article/details/51049111
http://www.cnblogs.com/tijing/archive/2012/09/13/2682854.html
http://blog.csdn.net/best2012power/article/details/49950195(安卓動态曲線的繪制)
http://www.java123.net/1001350.html
好了,今天就整理到這裡,趕腳就是把自己查閱的資料按照自己的邏輯理順了一下,方面下次快速查找。2016.12.19
補充:
(1)使用這個jar包畫出來折線圖,背景的四周卻總是黑黑的。
後來在用到這個屬性時:
[java] view plain copy print?
mRenderer.setMargins(new int[]{20,30,50,20}); //設定邊距,
//分别為:1.距離頂端标題的距離、2.距離螢幕左邊的距離、 3.X坐标标題與點圖例的距離、 4.距離螢幕右邊的距離
才意識到,這四周可能是Margin,然後找方法,果然有個
[java] view plain copy print?
mRenderer.setMarginsColor(0xffffff);
(2)如何設定背景色:
Java代碼
renderer.setApplyBackgroundColor(true);//是否可以自定義背景色
renderer.setBackgroundColor(Color.BLACK); //chart内部的背景色
renderer.setMarginsColor(Color.BLACK);//chart邊緣部分的背景色