1

我面临一个奇怪的问题。演示运行良好,但在我自己的应用程序中,如果我切换到另一个应用程序,然后再切换回来,左下角会有一个小的重复图表。

我的应用程序中的图表将定期更新(添加新的 (x,y) 并重新绘制)。

附上原图和切换回来后的图。

我怀疑我的 onResume() 方法存在一些问题。

@Override
protected void onResume() {
    super.onResume();

    if (mChartView == null) {
        LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayout_chart);
        mChartView = ChartFactory.getLineChartView(this, mDataSet, mRenderer);
        mRenderer.setClickEnabled(true);
        mRenderer.setSelectableBuffer(100);


        mChartView.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

            }
        });
        mChartView.setOnLongClickListener(new OnLongClickListener() {
             public boolean onLongClick(View v) {
                 return false;
             }
         });
         mChartView.addZoomListener(new ZoomListener() {

             public void zoomApplied(ZoomEvent e) {
             }
             public void zoomReset() {
             }
         }, true, true);

         mChartView.addPanListener(new PanListener() {
             public void panApplied() {}
         });

         layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }

    mChartView.repaint();

}

我不知道为什么会发生这种情况,有人有同样的问题吗?

正常图: 正常图表

从另一个应用切换回来后: 在此处输入图像描述

Android 3.2 (API Level 13) AChartEngine 版本 0.7.0 Asus EEE pad

4

1 回答 1

0

如果您只是添加新数据,则应该用新数据填充数据集并重新绘制图形。您创建图表 onCreate 并在添加新数据时刷新它。

看:创建 timechar

刷新代码 - 例如在链接中应该是:

private void updateData(List<Point> data) {
        int size= data.size();
        int lastsize = time_series.getItemCount();
        if (lastsize < size) {
        //add new data
        for (int i = lastsize ; i < size; i++) {
            try {
                Point p = pointslist.get(i);
                series.add(p.x,p.y);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        mChartView.repaint();
    }
    }

在这里,您只添加列表中的新点。我在这里有一个名为 Point 的值对象:

public class Point {
       public Date x;
       public double y;

       public Point() {
         super();
       };
}

您可以使用自己的对象或仅使用二维数组。

希望它有帮助,托尼

于 2012-02-07T08:16:15.573 回答