【问题标题】:draw a graph in android在android中绘制图形
【发布时间】:2011-10-09 00:36:10
【问题描述】:

我使用的是从这里获取的图表 http://writerbay.wordpress.com/2011/03/12/android-tutorial-displaying-chart-on-android/#comment-54

在android中绘制图形。 用于绘制图形的数据取自数据库。 在 x 轴上我放了数据,在 y 轴上我放了一些表示速度的数字。

使用异步线程从 DB 中读取数据。

我想做的是:

*读取数据的四个值和速度的四个值并将它们放在图表上

*读取以下四个值并更新我的图表....直到读取数据库中的数据

我面临的问题是:

LineView lv;我的图表有一个构造函数,它只接受数组 []

作为参数

所以我必须将包含整个数据的数组传递给它......这与我想要做的相反。

public class InitTask extends AsyncTask<DBAdapter,String, Void> {

    String TABLE_3;

    protected Void doInBackground(DBAdapter... db) {
        try {
            db[0].createDatabase();
            db[0].openDataBase();
            Cursor c = db[0].getCursor3(db[0].TABLE_3, user_id);


            viteza = new float[4];
            time = new String[4];

            if (c.moveToFirst()) {

                do {
                    int a=(int)Double.parseDouble(c.getString(3));

                    publishProgress(Integer.toString(a),c.getString(4));
                    Thread.sleep(500);


                } while (c.moveToNext());

            }
            c.close();
            db[0].close();

        } catch (Exception e) {
            Log.d("Eroare", "doInBackground", e);
        }

        return null;
    }

    protected void onProgressUpdate(String...values) {

        Aitem items[] = new Aitem[1];

      viteza[contor]=Float.parseFloat(values[0]);

     time[contor]=values[1];


        items[0]=new Aitem(Color.RED, "Evolution",viteza);


        lv.setAxisValueX(time);

    lv.setItems(items);


        setContentView(lv);
        }

}

时间是一个数组,包含我放在 x 轴上的数据,它必须是一个字符串

viteza-代表速度,也是一个包含浮点数的数组。

这就是我获取图表的方式:

items[0]=new Aitem(Color.RED, "Evolution",viteza);

lv.setItems(items);

问题是 Aitem() 构造函数需要数组 [] 字符串作为参数....我找不到用新值更新该数组 [] 的方法(逐步四个 vnew 值)

忘记旧的..

所以在某个时刻,我的图表上只显示了四个值....

问题是我不知道该怎么做...

有谁知道我该怎么做...谢谢!

编辑:contor=0 的初始值

【问题讨论】:

  • 您是否有特定原因要一次执行四点?
  • 它可能是五个点...但不是数据库中的所有点都一次因为有很多而且我不明白图表中的任何内容...它可能只有三个。 ...但我不知道该怎么做..thx
  • 所以你不知道我怎么能做到这一点?

标签: android database charts android-asynctask


【解决方案1】:

我可以看到您有两个选择。第一个会更容易实现,但在性能上更难,那就是连接显示器并重新绘制图形,尽可能多地读取。第二种选择是读取 4 个点并绘制它们,然后读取接下来的 4 个点并在新行中绘制它们,依此类推。

-= 编辑 =-

public class InitTask extends AsyncTask<DBAdapter, Double, Void> 
{
    String TABLE_3;

    protected Void doInBackground(DBAdapter... db)
    {
        try
        {

            // Like before

            do
            {
                double x1 = Double.parseDouble(c.getString(1));
                double y1 = Double.parseDouble(c.getString(2));
                double x2 = Double.parseDouble(c.getString(3));
                double y2 = Double.parseDouble(c.getString(4));
                double x3 = Double.parseDouble(c.getString(5));
                double y3 = Double.parseDouble(c.getString(6));
                double x4 = Double.parseDouble(c.getString(7));
                double y4 = Double.parseDouble(c.getString(8));

                publishProgress(x1, y1, x2, y2, x3, y3, x4, y4);
                Thread.sleep(500);
            } while (c.moveToNext());

            // Like before

            return;
    }

protected void onProgressUpdate(Double...values)
{
    double x1 = values[0];
    double y1 = values[1];
    double x2 = values[2];
    double y2 = values[3];
    double x3 = values[4];
    double y3 = values[5];
    double x4 = values[6];
    double y4 = values[7];
}

【讨论】:

  • ya....我想第二个...但是我怎么能将 4 个值传递给 publishProgress()....这意味着 8 个参数:(4 个时间值,4 个速度值)....如果你能用一段代码帮助 mie 那就太好了!:D
  • 问题是我不知道该怎么做...实现它...但我理解这个想法:)
  • 但是光标中的每一行都包含一个速度和一个时间……所以不能写c.getString(8)!!!在进入下一行之前!!!
  • 循环遍历光标并将它们保存到循环外的数组中。我不知道你的实现看起来如何。该代码旨在说明一个概念;由您来实际实施。
  • 对……由我决定……问题是我不完全胜任……只有半胜任:)))
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
相关资源
最近更新 更多