нарисовать график в Android - PullRequest
2 голосов
/ 02 июня 2011

Я использую график, взятый отсюда http://writerbay.wordpress.com/2011/03/12/android-tutorial-displaying-chart-on-android/#comment-54

, чтобы нарисовать график в Android.Данные, используемые для построения графика, взяты из БД.На оси x я положил данные, а на оси y - числа, означающие скорость.

Данные из БД читаются с использованием асинхронного потока.

Я хочу сделать следующее:

* Считать четыре значения для данных и четыре значения для скорости и поместить их на график

* Считать следующие четыре значения и обновить мой график .... до получения данных из БДчитается

Проблема, с которой я сталкиваюсь, заключается в следующем:

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);
        }

}

time - это массив, содержащий мои данные, которые я помещаю на ось x, это должна быть строка

viteza-for для скорости, а также массив, содержащий числа с плавающей запятой.

Вот как я получаю график:

items [0] = новый Aitem (Color.RED, "Evolution", viteza);

lv.setItems (items);

Проблема в том, что конструктору Aitem () нужны массивы [] String в качестве параметров .... и я не могу найти способ обновить этот массив [] новыми значениями (шаг за шагом четыре значения vnew)

забывая о старых ..

Так что в данный момент на моем графике отображаются только четыре значения ....

Проблема в том, что я не знаю, какчтобы сделать это ...

Кто-нибудь знает, как я могу это сделать ... Спасибо!

РЕДАКТИРОВАТЬ: начальное значение для contor = 0

1 Ответ

2 голосов
/ 02 июня 2011

У меня есть два варианта, которые я вижу.Первое было бы проще реализовать, но сложнее с точки зрения производительности, а именно для отображения на экране и рисования графика снова и снова, читая столько, сколько вы хотите.Второй вариант - прочитать 4 точки и нарисовать их, а затем прочитать следующие 4 и нарисовать их в новой строке и т. Д.

- = EDIT = -

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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...