先在畫面上要放圖形的區域 ,建立一個 id 為 chartLayout 的空白Layout:
要建立一個aChartEngine圖形,要做兩件事:(1)準備繪圖用的資料dataset;(2)產生繪圖用的View。
這個 App 將資料管理放在 DataManager 類別,使用的是 XYMultipleSeriesDataset,地磁感測資料放在 serialX、serialY 與 serialZ,另外將計算的向量長度放在 serialV:
XYSeries seriesX, seriesY, seriesZ, seriesV;
XYMultipleSeriesDataset dataset;
|
建構 dataset:
private void buildDataset()
{
seriesX = new XYSeries("X");
seriesY = new XYSeries("Y");
seriesZ = new XYSeries("Z");
seriesV = new XYSeries("V");
seriesTime = new ArrayList<Date>();
dataset = new XYMultipleSeriesDataset();
dataset.addSeries(seriesX);
dataset.addSeries(seriesY);
dataset.addSeries(seriesZ);
dataset.addSeries(seriesV);
}
|
繪圖的部分放在SensorScope類別,產生繪圖用的render:
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
…...
private void buildRender() // render builder
{
int[] colors = new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.BLACK };// line colors
for (int i = 0; i < numberOfLines; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setPointStyle(org.achartengine.chart.PointStyle.CIRCLE);
r.setFillPoints(true); // fill
renderer.addSeriesRenderer(r); //convert series data to a line
}
renderer.setChartTitleTextSize(48);
renderer.setChartTitle( "Sensor Scope");
…...
}
|
重點來了,用 ChartFactory 產生 View加到 chartLayout中:
private void buildChartView()
{
// add chart view to layout
chartView = ChartFactory.getLineChartView(context, dataManager.dataset, renderer);
LinearLayout chartLayout = (LinearLayout) rootView.findViewById(R.id.chartLayout);
try{
chartLayout.addView(chartView);
} catch (Exception e){
e.printStackTrace();
}
}
|
之後只要調整Layout的位置,就可以很輕鬆地把圖形擺在畫面任何一個位置了。
這個 App 跑24小時,產生115萬筆的資料,每10000筆存成一個CSV格式的檔案,放 /Documents/Quake目錄下,每個檔案約600KB:
Google Play上架:https://play.google.com/store/apps/details?id=com.ghostysoft.earthquakepredictor
原始程式碼放在:https://github.com/ghostyguo/EarthquakePredictor
沒有留言:
張貼留言