更改图表后,Achartengine zoom,pan和onClick事件无法正常工作,

时间:2014-04-26 15:06:34

标签: android zoom onclicklistener achartengine pan

我正在使用achartengine在Android应用中显示图表。 该应用程序允许用户显示不同的数据集和不同的图表类型,具体取决于他们从微调器中做出的选择。 我的问题是这个。原始图表正确显示,所有zoom,pan和onClick事件都按预期执行。但是当我删除第一个图表并添加另一个图表时,图表将不会从触摸中缩放或平移,而onClick将不会返回选定的点数据。 achartengine缩放和重置按钮仍然显示并按预期工作。要删除图表并添加另一个图表,我使用了以下代码的不同变体并得到了相同的结果。

private void repaint() {
    mchart1_LL_pie = (LinearLayout) this.findViewById(R.id.chart1_LL_pie);
    if (mChart1_ChartView_pie != null) {
        mchart1_LL_pie.removeView(mChart1_ChartView_pie);
    }

    mChart1_ChartView_pie = ChartFactory.getPieChartView(getApplicationContext(), mChart1_Pie_Series, mChart1_Pie_Renderer);

    mchart1_LL_pie.addView(mChart1_ChartView_pie, 0, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}

我还尝试删除所有渲染器并使用以下代码清除数据系列。

mChart1_Pie_Renderer.removeAllRenderers();
    int size = mChart1_Pie_Series.getItemCount();
    for (int i = 0; i < size; i++) {
        mChart1_Pie_Series.remove(0);

然后使用以下内容显示包含重建数据集和渲染器的图表。

mChart1_ChartView_pie = ChartFactory.getPieChartView(getApplicationContext(), mChart1_Pie_Series, mChart1_Pie_Renderer);

这种方法的问题是在触摸显示屏之前不会显示下一个图表。触摸显示后,将显示正确的图表,并且所有zoom,pan和onClick事件都能正常工作。

有没有人遇到过这个问题?如果是这样,你是如何解决的?

非常感谢任何帮助或建议。谢谢 唐

1 个答案:

答案 0 :(得分:0)

我正在使用图表进行应用程序。我有一个TimeSeries的演变图表。我粘贴我的功能来绘制图表。它可以帮助你:))

public void drawChart() {
    mChartView = null;
    mDataset = null;
    mRenderer = null;
    mDataset = new XYMultipleSeriesDataset();
    mRenderer = new XYMultipleSeriesRenderer();

    mRenderer.setAxisTitleTextSize(15);
    mRenderer.setLabelsTextSize(15);
    mRenderer.setLegendTextSize(15);
    XYSeriesRenderer r = new XYSeriesRenderer();
    r.setColor(Color.BLUE);
    r.setFillPoints(true);
    mRenderer.addSeriesRenderer(r);
    mRenderer.setZoomEnabled(true);
    mRenderer.setShowGrid(true);
    mRenderer.setApplyBackgroundColor(true);
    mRenderer.setAxesColor(Color.BLACK);
    mRenderer.setShowLegend(true);
    mRenderer.setShowLabels(true);
    mRenderer.setLabelsColor(Color.BLACK);
    mRenderer.setBackgroundColor(Color.TRANSPARENT);
    mRenderer.setYLabelsPadding(20);
    mRenderer.setXLabelsPadding(7);
    mRenderer.setYLabelsAlign(Align.LEFT);
    mRenderer.setMarginsColor(Color.rgb(220, 220, 220));
    mRenderer.setAxesColor(Color.BLACK);
    mRenderer.setLabelsColor(Color.BLACK);
    mRenderer.setXLabelsColor(Color.BLACK);
    mRenderer.setYLabelsColor(0, Color.BLACK);
    // mRenderer.setAxisTitleTextSize(30);
    mRenderer.setGridColor(Color.BLACK);
    mRenderer.setXRoundedLabels(false);
    // mRenderer.setLabelsTextSize(25);
    mRenderer.setYTitle(Config.getResource("PRICE") + "("
            + dto.getCurrencyCode() + ")");
    mRenderer.setMargins(new int[] { 0, 60, 50, 0 });
    mRenderer.setMarginsColor(Color.WHITE);
    // mRenderer.setXTitle("Date");
    mRenderer.setShowLegend(false);
    mRenderer.setInScroll(true);
    evolutionSecurity = new TimeSeries("");
    mDataset.addSeries(evolutionSecurity);

    fillDataEvolution(); //Get data into serie 

    mChartView = ChartFactory.getTimeChartView(this, mDataset, mRenderer,
            "dd-MM-yy");

    LinearLayout layout = (LinearLayout) findViewById(R.id.graphe_evolution_rate_currency);
    layout.addView(mChartView);

    if (layout != null)
        layout.removeAllViews();

    layout.addView(mChartView);
    mChartView.repaint();
    mChartView = null;


}

然后当我在我的微调器中选择另一个值时,我调用此方法并正确地重新绘制图表。