适用于Android的GPL兼容图形库

时间:2010-06-29 22:44:36

标签: android graphing

采用与this question类似的方法,我正在寻找一种在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()中调用canvas的drawPoints方法(另外,我在onMeasure()中更新this.widthMeasureSpec和this.heightMeasureSpec。)

这是将minA / maxA作为我的自变量的界限,minS / maxS作为我的因变量的界限。

这适用于显示数据,但我希望其他人解决了绘制轴和平移/缩放的问题。

我有大约150,000个数据点,我宁愿将它们保留为浮点数来节省一半的内存。我不知道JavaScript中有多大的十进制数,但我真的不想借助JavaScript为Google Charts API或基于HTML的解决方案传递数据。

我在MyTouch 3g(最初的3.5mm插孔和RAM升级之前)运行它,因此性能是一个问题。我想在GPLv3下发布最终项目,因此不包括GraphView

图表与this属于同一类型,因此通过排除太靠近的点以显示在屏幕上的任何优化肯定会产生影响。

3 个答案:

答案 0 :(得分:2)

sargas,请检查android-misc-widgets。它包含一个名为PlotView的小部件,其示例为TestInterPolator

希望它有所帮助。

答案 1 :(得分: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);

答案 2 :(得分:-1)

http://www.jfree.org/jfreechart/可以满足您的需求,它是一个Java库,所以它应该适合Android。它是LGPL。

如果你可以使用JavaScript路线,那么你可以查看ProtoVis http://vis.stanford.edu/protovis/