java - 如何在图表引擎中缓慢绘制图表

标签 java android graph achartengine

是否可以使用 achartengine 库来制作它,以便在绘制图形时它可以缓慢地绘制。像每毫秒绘制一个点?不太确定是否要进行更改。

最佳答案

是的,这是可能的。

你可以创建一个定时器任务来每隔一段时间做下面的事情:

  1. 将 (x,y) 对添加到当前系列
  2. 重新绘制图表

通过这种方式,你可以“慢慢地”绘制出一张图。

这是我写的一个例子,它会每隔一段时间画一个y = x^2的图。这不完全是你想要做的,但原理是一样的,玩它并修改它以满足你的需要,如果你遇到任何问题告诉我。

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

    // Buttons
    mButtonStart = (Button) findViewById(R.id.button_plot_start);
    mButtonStop = (Button) findViewById(R.id.button_plot_stop);

    mButtonStart.setOnClickListener(this);
    mButtonStop.setOnClickListener(this);

    // Chart
    mRenderer.setZoomButtonsVisible(true);
    String seriesTitle = "SAMPLE"

    XYSeries series = new XYSeries(seriesTitle);
    mDataSet.addSeries(series);
    mCurrentSeries = series;
    XYSeriesRenderer renderer = new XYSeriesRenderer();
    renderer.setPointStyle(PointStyle.SQUARE);
    renderer.setFillPoints(true);
    renderer.setDisplayChartValues(true);
    renderer.setColor(Color.RED);
    mRenderer.addSeriesRenderer(renderer);
    mRenderer.setXLabels(0);
}

@Override
protected void onRestart() {
    super.onRestart();
}

@Override
protected void onResume() {

    super.onResume();
    if (mChartView == null) {
        // Enable click and pan
        mRenderer.setClickEnabled(true);
        mRenderer.setPanEnabled(true, true);

        LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayout_chart);
        mChartView = ChartFactory.getLineChartView(this, mDataSet, mRenderer);
        mRenderer.setClickEnabled(true);
        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));
    } else {
        mChartView.repaint();       
    }
}


@Override
protected void onDestroy() {
    if (mTimerTask != null) {
        mTimerTask.cancel();
    }
    if (mTimer != null) {
        mTimer.cancel();
    }
    super.onDestroy();
}



protected void updateChart() {      

    mCurrentSeries.add(mX, mX*mX);
    mX++;

    // Update the chart by repaint()
    if (mChartView != null) {
        mChartView.repaint();
    }
}


/**
 * A TimerTask class
 *
 */
private class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        updateChart();
    }
}


public void onClick(View v) {
    switch (v.getId()) {
    case R.id.button_plot_start:
        // "Start" button clicked

        // Cancel current timer and timer task if existed
        if (mTimerTask != null ) {
            mTimerTask.cancel();
        }
        if (mTimer != null) {
            mTimer.cancel();
        }

        mTimer = new Timer();
        mX = 0;
        // Clear current X-axis
        mCurrentSeries.clear();
        mRenderer.clearXTextLabels();

                    mTimerTask = new MyTimerTask();

        // Delay 100(0.1s), interval is 3000 (3s)
        mTimer.schedule(mTimerTask, 100, 3000);

        break;

    case R.id.button_plot_stop:
        // "Stop" button clicked

        // Cancel current timer and timer task
        if (mTimerTask != null) {
            mTimerTask.cancel();
        }
        if (mTimer != null) {
            mTimer.cancel();
        }
        break;
    }

}

关于java - 如何在图表引擎中缓慢绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8374769/

相关文章:

java - 如何在 Keycloak 中创建脚本映射器?

java api 设计 - NULL 或 Exception

android - OpenGL 纹理大小限制。为特定的 Android 设备提供备用资源

java - 尝试从 Android 上的 Facebook SDK 检索信息时强制关闭错误

algorithm - O(m+n) 算法检查有向图是否单边连通

algorithm - 寻找位置 "closest"到另外两个地方的好的目标函数是什么?

java - Android/Gradle/Unity - 在 AAR 插件中包含所有依赖项

java - 如何将 String 转换为正确的 Enum 常量(实现公共(public)接口(interface)的多个 Enum)?

android - Android 黑屏中的 Vuforia 对象识别 Unity 示例结果

android - 如何在 Android 上使用 Firestore 创建邀请系统