2011-07-04 3 views
4

15分以内に多くのデータ(30msごとに新しい値)を視覚化するリアルタイムチャートを描画したいと考えています。私はパスを使用していますが、20000を超える値を表示し、キャンバスを翻訳したい場合は非常にゆっくりと動作し、毎秒悪化します。私もdrawLineを使ってみましたが、うまく動作しません。Androidキャンバスパスリアルタイムパフォーマンス

誰もPathよりも優れたソリューションについてのアイデアはありますか?あるいは、私は何か間違っているのでしょうか?私の現在のソルティオは:最初にパスを初期化してから、新しい値を得るたびに新しいラインを追加してキャンバスを翻訳します。

+0

誰かがラインを描いてキャンバスを翻訳するのが遅すぎて、ブレークが見えてうまく動作しないのではないかと思いますか? – beginner

答えて

0

キャンバスで20000本以上の線を描くのは遅くなるでしょう。私はあなたがこの上でOpenGLを使わなければならないということです。このリンクは役に立つかもしれません:http://obviam.net/index.php/opengl-es-with-android-switching-from-canvas-to-opengl/

+0

OpenGLを使いたくないのは、ほとんどすべてを書き直さなければならないからです。しかし、他の解決策がない場合は、試してみます。 – beginner

3

20の000の値のパスを表示することはおそらくOpenGLで、それを描画するグラフィックスチップに送信するデータのちょうどたくさんだものは何でも使う、遅くなります...

これを行う「正しい」方法(パフォーマンス上)は、できるだけ多くのものをキャッシュし、描画する必要のあるものだけを描画することです。たとえば、最初のN点をビットマップに描画し、次のM点にのみパスを使用して(前のビット点のビットマップを描画する)ことができます。ビットマップの描画は非常に高速です。だからしばらくの間、ビットマップをリフレッシュして(もう少し時間がかかります)、残りの点をプロットすることができます。

また、パスを短くすることもできます。実際には20,000の値が必要ですか?ポイント5を5または10を10(またはそれ以上)にグループ化することはできませんでしたか?現在のところ、画面は最大でも1280ピクセル幅です...

2

すべてのonDraw()にすべて描画していますか?それが遅い理由です。まず第一に、誰も30msごとに変化を見ることができません。キャッシュビットマップに描画更新を保存し、次にinvalidate()を呼び出します。次にonDraw()でそのビットマップをキャンバスにコピーするだけです。

+0

こんにちは、少し遅れてここに投稿してください。しかし、あなたのスーパーアイデア、それをどうやって実現するのか、助けてくれますか? – zIronManBox

関連する問題