安卓动态图表

标签 android dynamic charts real-time

嗨,Android 开发者, 目前我正在开发一个基于财务的图表应用程序,我在 jjoe64 博客的帮助下绘制图表。但现在我要实现实时图表。例如,一旦在服务器端进行了更改,图表就会每隔一秒或一分钟自动在表面绘制。任何人都可以执行这类任务吗?请帮我解决这个问题。

最佳答案

好的,我强烈推荐使用AChartEngine。它是免费的、轻量级的,并支持多种类型的图表、饼图、图表等。关于动态更新图表,我通过在单独的线程中添加值来实现这一点。这是我的例子,没什么特别的:

package my.pack;

import java.util.Date;
import java.util.Random;

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

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

 public class ChartsActivity extends Activity {

private static Random random = new Random();

private static TimeSeries timeSeries;
private static XYMultipleSeriesDataset dataset;
private static XYMultipleSeriesRenderer renderer;
private static XYSeriesRenderer rendererSeries;
private static GraphicalView view;
private static Thread mThread;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     

    dataset = new XYMultipleSeriesDataset();

    renderer = new XYMultipleSeriesRenderer();
    renderer.setAxesColor(Color.BLUE);
    renderer.setAxisTitleTextSize(16);
    renderer.setChartTitle("Time");
    renderer.setChartTitleTextSize(15);
    renderer.setFitLegend(true);
    renderer.setGridColor(Color.LTGRAY);
    renderer.setPanEnabled(true, true);
    renderer.setPointSize(10);
    renderer.setXTitle("Time");
    renderer.setYTitle("Number");
    renderer.setMargins( new int []{20, 30, 15, 0});
    renderer.setZoomButtonsVisible(true);
    renderer.setBarSpacing(10);
    renderer.setShowGrid(true);


    rendererSeries = new XYSeriesRenderer();
    rendererSeries.setColor(Color.RED);
    renderer.addSeriesRenderer(rendererSeries);
    rendererSeries.setFillPoints(true);
    rendererSeries.setPointStyle(PointStyle.CIRCLE);

    timeSeries = new TimeSeries("Random");
    mThread = new Thread(){
        public void run(){
            while(true){
            try {
                Thread.sleep(2000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
                timeSeries.add(new Date(), random.nextInt(10));
                view.repaint();
            }
        }
    };
    mThread.start();
}

@Override
protected void onStart() {
    super.onStart();
    dataset.addSeries(timeSeries);
    view = ChartFactory.getTimeChartView(this, dataset, renderer, "Test");
    view.refreshDrawableState();
    view.repaint();
    setContentView(view);    
}

}

将您自己的值添加到线程。您可能想看看如何使用 AChartEngine 库。 编码愉快!

关于安卓动态图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8878573/

相关文章:

javascript - 在 zingChart.render() 之后调用回调函数

java - 使用 PKCS 11 token 进行 SSL 握手

java - Android 准确读取文本文件

javascript - Chart.js 阴影区域

javascript - 请帮我把这个脚本转换成一个简单的图像 slider

c# - 动态 LINQ

javascript - 添加新点时移动图表

java - GCM 多行通知

android - 如果我失去了开发人员证书,该如何在Android Marketplace中更新我的应用程序?

objective-c - Objective-C 中的动态二维 C 数组崩溃