문제

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();
}
}
도움이 되었습니까?

해결책

Try like

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()
        {
            return super.getPadding();
        }
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top