3

この質問と同様のアプローチで、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 メソッドを呼び出します (また、onMeasure() で this.widthMeasureSpec と this.heightMeasureSpec を更新します)。

これは、独立変数の境界として minA/maxA を使用し、従属変数の境界として minS/maxS を使用しています。

これはデータの表示には問題なく機能しますが、他の誰かが軸の描画とパン/ズームの問題を解決したことを願っています。

約 150,000 のデータ ポイントがありますが、メモリの半分を節約するために、これらを float として保持することをお勧めします。JavaScript で 10 進数がどのくらい大きいかはわかりませんが、メモリのために、Google Charts API や HTML ベースのソリューションのために JavaScript を介してデータを渡すことに頼りたくありません。

これを MyTouch 3g (オリジナル、3.5mm ジャックの前、RAM アップグレード) で実行しているので、パフォーマンスに問題があります。GPLv3 の下で最終的なプロジェクトをリリースしたいので、これはGraphViewを除外します。

グラフはこれと同じタイプであるため、近すぎて画面に表示されないポイントを除外することによる最適化は、間違いなく違いを生みます。

4

3 に答える 3

2

sargas 、android-misc-widgets をPlotView確認してください。 exampleという名前のウィジェットが含まれていますTestInterPolator

それが役に立てば幸い。

于 2011-01-27T08:29:10.137 に答える
1

元の投稿: Android 用チャートおよびグラフ ライブラリ

ライブラリGraphViewを使用すると、折れ線グラフと棒グラフを作成できます。

GraphView は、柔軟で見栄えの良い折れ線グラフと棒グラフをプログラムで作成する Android 用のライブラリです。理解し、統合し、カスタマイズするのは簡単です。

最初にライブラリをチェックアウトし、プロジェクトに統合します。ソースコードは github でホストされています。 github の GraphView ライブラリ

グラフをスケーラブル (ズーム) およびスクロール可能にすることもできます。このライブラリの詳細については、元の投稿: Chart and Graph Library for Android

これは次のようになります折れ線グラフ

次に、数行のコードで簡単に作成できます (スニペットを参照)。

// 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);
于 2011-07-28T10:12:01.337 に答える
-1

ニーズに合ったhttp://www.jfree.org/jfreechart/があります。これは Java ライブラリであるため、Android に適しているはずです。そしてLGPLです。

JavaScript ルートに進むことができる場合は、ProtoVis http://vis.stanford.edu/protovis/を確認できます。

于 2011-01-26T23:13:46.847 に答える