如何在achartengine(android)中分离主代码和图表代码

p8h8hvxi  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(350)

我是oop的新用户。
我有一个关于android的简单问题。
我想用

new DrawMonthLineChart(titles, x, y).getChartView()

获取折线图视图。
(如果在主代码中合并图表代码文件,则折线图代码是正确的)
我把图纸部分独立归档。
但这里会显示错误

View chart = ChartFactory.getCubeLineChartView( this, dataset, renderer, 0.14f);

错误信息如下:

The method getCubeLineChartView(Context, XYMultipleSeriesDataset,     XYMultipleSeriesRenderer, float) in the type ChartFactory is not applicable for the     arguments (DrawMonthLineChart, XYMultipleSeriesDataset, XYMultipleSeriesRenderer, float)

我认为问题是“这个”不是指上下文。
我不知道怎么把“这个”改成什么。
有谁能帮我一把吗?
非常感谢你。
我的主要代码如下:

package net.test.achartenginedemo;

    import java.util.ArrayList;
    import java.util.List;

    import org.achartengine.ChartFactory;
    import org.achartengine.chart.PointStyle;
    import org.achartengine.model.XYMultipleSeriesDataset;
    import org.achartengine.model.XYSeries;
    import org.achartengine.renderer.XYMultipleSeriesRenderer;
    import org.achartengine.renderer.XYSeriesRenderer;

    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Color;
    import android.graphics.Paint.Align;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.LinearLayout;

    public class AchartengineMain extends Activity {

        private LinearLayout ll ;

                @Override
                protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_achartengine_main);

            ll = (LinearLayout) findViewById(R.id.chartLL);

            String[] titles = new String[] { "line1"};

            List<double[]> x = new ArrayList<double[]>();

            List<double[]> y = new ArrayList<double[]>();

            x.add(new double[] { 1, 2.2, 3.4, 4.6, 5.8, 10 });
            y.add(new double[] { 80, 78, 75, 82, 75, 78 });

            ll.addView(new DrawMonthLineChart(titles, x, y).getChartView(), new                 LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.achartengine_main, menu);
    return true;
}

}
我的drawmonthchart代码如下:

package net.test.achartenginedemo;

    import java.util.List;

    import org.achartengine.ChartFactory;
    import org.achartengine.chart.PointStyle;
    import org.achartengine.model.XYMultipleSeriesDataset;
    import org.achartengine.model.XYSeries;
    import org.achartengine.renderer.XYMultipleSeriesRenderer;
    import org.achartengine.renderer.XYSeriesRenderer;

    import android.graphics.Color;
    import android.graphics.Paint.Align;
    import android.view.View;

    public class DrawMonthLineChart {

        private String[] titles = new String[] { "line1" };
        private List<double[]> x;
        private List<double[]> y;
        public DrawMonthLineChart( String[] titles, List<double[]> x , List<double[]> y){
            this.titles = titles;
            this.x = x;
            this.y = y;

        }

        public View getChartView()
        {

            XYMultipleSeriesDataset dataset = buildDaset(titles, x, y);

            int[] colors = new int[] { Color.BLUE };

            PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE};

            XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles, true);

            setChartSettings(renderer, "line chart test", "", "", 50, 200,-1, 13, 
            Color.BLACK,x);
            // ------------------***************here*******-------------
            View chart = ChartFactory.getCubeLineChartView( this, dataset, renderer, 0.14f);
            // ------------------***************here*******-------------

            return chart;

        }

private XYMultipleSeriesDataset buildDaset(String[] titles,
        List<double[]> xValues, List<double[]> yValues) {

    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

    int length = titles.length;
    for (int i = 0; i < length; i++) {

        XYSeries series = new XYSeries(titles[i]);

        double[] xV = xValues.get(i);
        double[] yV = yValues.get(i);
        int seriesLength = xV.length;

        for (int k = 0; k < seriesLength; k++) {
            series.add(xV[k], yV[k]);
        }
        dataset.addSeries(series);
    }

    return dataset;
}

private XYMultipleSeriesRenderer buildRenderer(int[] colors,
        PointStyle[] styles, boolean fill) {

    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
    int length = colors.length;

    for (int i = 0; i < length; i++) {
        XYSeriesRenderer r = new XYSeriesRenderer();
        r.setColor(colors[i]);
        r.setPointStyle(styles[i]);
        r.setFillPoints(fill);
        r.setLineWidth(2.5f);
        renderer.addSeriesRenderer(r);
    }

    return renderer;
}

private void setChartSettings(XYMultipleSeriesRenderer renderer,
        String title, String xTitle, String yTitle, double yMin,
        double yMax, double xMin, double xMax, int axesColor, List<double[]> x) {

            renderer.setChartTitle(title);
            renderer.setChartTitleTextSize(24);
            renderer.setXTitle(xTitle);
            renderer.setYTitle(yTitle);
            renderer.setXAxisMin(xMin);
            renderer.setXAxisMax(xMax);
            renderer.setYAxisMin(yMin);
            renderer.setYAxisMax(yMax);
            renderer.setYLabels(18);
            renderer.setXLabelsColor(axesColor);
            renderer.setLabelsColor(Color.BLACK);
            renderer.setShowGrid(true);
            renderer.setClickEnabled(false);
            renderer.setShowCustomTextGrid(true);
            renderer.setShowGridY(true);

        }
    }
3wabscal

3wabscal1#

错误消息说明了这一切:

Method needs:          (Context, XYMultipleSeriesDataset, XYMultipleSeriesRenderer, float)

Method gets:(DrawMonthLineChart, XYMultipleSeriesDataset, XYMultipleSeriesRenderer, float)

你的 DrawMonthLineChart 班级有 Object 作为一个家长,但必须要有 Context 作为祖先。
所以你需要

public class DrawMonthLineChart extends Context {

public class DrawMonthLineChart extends Activity {

或者其他合适的。见文件。

相关问题