2010-06-29 4 views
3

В аналогичном подходе к this question, я ищу способ построения точек данных для представления на Android. Предпочтительно, библиотека, которая будет делать это для ввода произвольного диапазона, а также позволяет панорамирование и масштабирование (с помощью пинча или масштабирования).GPL-совместимая графическая библиотека для Android

Прямо сейчас, у меня есть подкласс-й изд вид, который делает следующую нормализацию:

  final int width = View.MeasureSpec.getSize(this.widthMeasureSpec); 
      final int height = View.MeasureSpec.getSize(this.heightMeasureSpec); 
      final float factorA = width/(maxA - minA); 
      final float factorS = height/(maxS - minS); 
      final float constFactorA = factorA * minA; 
      final float constFactorS = factorS * minS; 
      final int dataLength = data.length; 

      for (int i = 0; i < dataLength; ++i) { 
        if (i % 2 == 0) 
          _data[i] = _data[i] * factorA - constFactorA; 
        else 
          _data[i] = _data[i] * factorS - constFactorS; 
      } 

и вызов в OnDraw() к методу drawPoints холста (также, я обновляю this.widthMeasureSpec и this.heightMeasureSpec в onMeasure()).

Это с minA/maxA в качестве границ для моей независимой переменной и minS/maxS в качестве границ для моей зависимой переменной.

Это прекрасно работает для отображения данных, но я надеюсь, что кто-то другой решит проблему рисования осей и панорамирования/масштабирования.

У меня есть ~ 150 000 точек данных, и я бы предпочел сохранить их как поплавки, чтобы сохранить половину памяти. Я не знаю, как большие десятичные числа находятся в JavaScript, но я действительно не хочу прибегать к передаче данных через JavaScript для API Google Charts или решения на основе HTML для памяти.

Я запускаю это на MyTouch 3g (оригинал, до разъема 3,5 мм и его обновление RAM), поэтому производительность - это проблема. Я хотел бы выпустить окончательный проект под GPLv3, так что это исключает GraphView.

Графики одного типа, такие как this, поэтому любая оптимизация путем исключения точек, которые слишком близки друг к другу, чтобы отображаться на экране, определенно повлияет.

+0

Для 200 повторных пунктов я бы с радостью помог вам написать один ... :) FWIW Я настоятельно рекомендую использовать OpenGL для этого ... как только ваш набор данных находится в буфере вершин, вам не нужно его трогать, а h/w ускорение сделает масштабирование и панорамирование так же гладко, как масло. Если вы хотите использовать обычный Canvas API (onDraw и т. Д.), Тогда предложите рисовать с помощью Матрицы. –

+0

Я никогда не использовал OpenGL. Есть ли http://blog.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/ (и последующие части), похоже, хорошее представление? Я не вижу, в каких единицах находятся кординаты (т. Е. Что означает точка (1,1)?) – sargas

+0

За несколько дней до CUDA и других методов ускорения они действительно используют opengl/COGL и шейдеры для закрепления своих компиляций .. - - книга мемов. Btw, реализация OpenGL, сама по себе, может быть слишком голодна к процессору - имейте в виду, что перерисовка может занять время. –

ответ

-1

Существует http://www.jfree.org/jfreechart/, который может удовлетворить ваши потребности, это библиотека Java, поэтому она должна хорошо подходить для Android. И это LGPL.

Если вы можете идти по пути JavaScript, то вы можете проверить ProtoVis http://vis.stanford.edu/protovis/

+0

Извините, jfreechart зависит от AWT, и ProtoVis отсутствует (неважно, почему я дал против использования javascript), поскольку для этого требуется SVG (поддержка SVG в android довольно плохая :() – sargas

2

Саргаса, проверите android-misc-widgets .Это содержит виджет под названием PlotView с примером TestInterPolator.

Надеюсь, это поможет.

1

Original post: Chart and Graph Library for Android

С помощью библиотеки GraphView Можно создать линию и гистограмм.

GraphView - это библиотека для Android, позволяющая программно создавать гибкие и удобные штриховые диаграммы. Легко понять, интегрировать и настроить его.

Сначала проверьте библиотеку и интегрируйте ее в свой проект. Исходный код размещен на github. GraphView library on github

Можно также масштабировать график (масштабирование) и прокручивать график.Более подробную информацию об этой библиотеке на Original post: Chart and Graph Library for Android

Вот как это будет выглядеть: line graph

Тогда вы можете легко создать его с помощью нескольких строк кода (см фрагмент):

// graph with dynamically genereated horizontal and vertical labels 
GraphView graphView = new LineGraphView(
    this // context 
    , new GraphViewData[] { 
    new GraphViewData(1, 2.0d) 
    , new GraphViewData(2, 1.5d) 
    , new GraphViewData(2.5, 3.0d) // another frequency 
    , new GraphViewData(3, 2.5d) 
    , new GraphViewData(4, 1.0d) 
    , new GraphViewData(5, 3.0d) 
    } // data 
    , "GraphViewDemo" // heading 
    , null // dynamic labels 
    , null // dynamic labels 
); 
LinearLayout layout = (LinearLayout) findViewById(R.id.graph1); 
layout.addView(graphView); 
Смежные вопросы