В аналогичном подходе к 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, поэтому любая оптимизация путем исключения точек, которые слишком близки друг к другу, чтобы отображаться на экране, определенно повлияет.
Для 200 повторных пунктов я бы с радостью помог вам написать один ... :) FWIW Я настоятельно рекомендую использовать OpenGL для этого ... как только ваш набор данных находится в буфере вершин, вам не нужно его трогать, а h/w ускорение сделает масштабирование и панорамирование так же гладко, как масло. Если вы хотите использовать обычный Canvas API (onDraw и т. Д.), Тогда предложите рисовать с помощью Матрицы. –
Я никогда не использовал OpenGL. Есть ли http://blog.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/ (и последующие части), похоже, хорошее представление? Я не вижу, в каких единицах находятся кординаты (т. Е. Что означает точка (1,1)?) – sargas
За несколько дней до CUDA и других методов ускорения они действительно используют opengl/COGL и шейдеры для закрепления своих компиляций .. - - книга мемов. Btw, реализация OpenGL, сама по себе, может быть слишком голодна к процессору - имейте в виду, что перерисовка может занять время. –