I'm using AchartEngine, and trying to create a combined chart, containing a ScatterChart and a LineChart, both based on TimeSeries, with two Y-axes, one for each series. The project is to generate a wind chart, a bit like this:
http://www.clevelandweather.net/wind/default.php
(see the "previous 24 hours" or "previous 7 days" examples).
I have come up against the problem that the constructor for TimeSeries (unlike the parent class XYSeries) does not include the scaleNumber - and I need this to properly configure two Y-axes. I have read this question:
AchartEngine: How to use TimeSeries with two different scales
The edited 2nd answer by CraigB seems like a good approach, but I can't get it to compile - the compiler flags "The method getPadding(double) of type VectorChart.MyTimeSeries must override or implement a supertype method". What's going on?
I'm an android/java newbie so please spell it out for me!
My code:
package au.com.merenito.seatalkcharter;
import java.util.Date;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.ScatterChart;
import org.achartengine.chart.TimeChart;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.content.Context;
public class VectorChart {
private GraphicalView mChartView;
private MyTimeSeries mag_dataset;
private MyTimeSeries dir_dataset;
private XYMultipleSeriesDataset mDataset;
private XYSeriesRenderer mag_renderer;
private XYSeriesRenderer dir_renderer;
private XYMultipleSeriesRenderer mRenderer;
int maxPoints;
private class MyTimeSeries extends XYSeries {
public MyTimeSeries(String title, int scaleNumber) {
super(title, scaleNumber);
}
public synchronized void add(Date x, double y) {
super.add(x.getTime(), y);
}
@Override
protected double getPadding(double x) { //********* Compiler error here!!
return 1;
}
}
public VectorChart(String title, int mP)
{
maxPoints = mP;
mag_dataset = new MyTimeSeries(title,0);
dir_dataset = new MyTimeSeries("Dir",1);
mDataset = new XYMultipleSeriesDataset();
mDataset.addSeries(mag_dataset);
mDataset.addSeries(dir_dataset);
mag_renderer = new XYSeriesRenderer();
dir_renderer = new XYSeriesRenderer();
//put any line customisation here, eg renderer.setColor
mRenderer = new XYMultipleSeriesRenderer();
mRenderer.addSeriesRenderer(mag_renderer);
mRenderer.addSeriesRenderer(dir_renderer);
mRenderer.setZoomEnabled(false, false);
mRenderer.setPanEnabled(false,false);
mRenderer.setChartTitle(title);
}
public GraphicalView getView(Context context)
{
String[] types = new String[] {TimeChart.TYPE, ScatterChart.TYPE };
mChartView = ChartFactory.getCombinedXYChartView(context, mDataset, mRenderer, types );
return mChartView;
}
public void addNewPoint(Date x, float mag, float dir, boolean reFresh)
{
mag_dataset.add(x, mag);
dir_dataset.add(x, dir);
while (mag_dataset.getItemCount()>maxPoints) mag_dataset.remove(0);
while (dir_dataset.getItemCount()>maxPoints) dir_dataset.remove(0);
if(reFresh) mChartView.repaint();
}
}