gpt4 book ai didi

java - 如何在Achartengine(Android)中分离主代码和图表代码

转载 作者:行者123 更新时间:2023-12-01 14:29:09 24 4
gpt4 key购买 nike

我是 OOP 新用户。

我有一个关于 Android 的简单问题。

我想使用

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

获取折线图 View 。

(如果我在主代码中合并图表代码文件,则折线图代码是正确的)

我将绘图部分保存到独立文件中。

但是这里会显示错误。(如下)

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)

我认为问题是“this”不意味着上下文。

我不知道如何将“this”修复为某些内容。

有人可以帮我吗?

非常感谢。

我的主要代码如下:

    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);

}
}

最佳答案

错误消息说明了一切:

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 {

或者适当的东西。请参阅docs .

关于java - 如何在Achartengine(Android)中分离主代码和图表代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16955861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com