この質問と同様のアプローチで、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を除外します。
グラフはこれと同じタイプであるため、近すぎて画面に表示されないポイントを除外することによる最適化は、間違いなく違いを生みます。