デフォルトのラベルを使用する場合と同じズーム/パン機能を維持しながら、AChartEngine BarGraph にカスタム x 軸ラベルを適用するにはどうすればよいですか? 問題は、100 以上のデータ ポイントがあるため、一度に画面に 5 つまたは 6 つのラベルしか描画したくないことです。
デフォルトの機能はもともと 3 つのラベル (私の場合は 0、50、100) を描画し、拡大すると 4/5 のラベルが描画されます。左または右にパンすると、ラベルは対応するバーと一緒に移動します。
私は 2 つのアプローチを試みましたが、どちらもデフォルト ラベルと同じズームおよびパン機能を提供しません。
1) グラフが最初に作成されたときに、5 つの等間隔のラベルを生成します。
これの問題は、ラベルが 5 つしか作成されないため、拡大しすぎるとラベルが表示されないことです。
//For 100 data points, add five labels every 20 datapoints mRenderer.addXTextLabel(0, "label 1"); mRenderer.addXTextLabel(20, "label 2"); mRenderer.addXTextLabel(40, "label 3"); mRenderer.addXTextLabel(60, "label 4"); mRenderer.addXTextLabel(80, "label 5"); mRenderer.setXLabels(0);
2) GraphicalView に ZoomListener および PanListener インターフェースを実装します。
このソリューションはほとんど機能しますが、ラベルは常に固定された場所にあり、グラフが左右にパンされたときに新しい値で「更新」されるだけです。対応するバーで移動する必要があります。
graphicalView.addZoomListener( new ZoomListener() { @Override public void zoomApplied(ZoomEvent e) { double start = mRenderer.getXAxisMin(); double stop = (double)mRenderer.getXAxisMax(); double step = (double)(stop - start) / 5; mRenderer.clearXTextLabels(); for (double i = start; i <= stop; i += step) mRenderer.addXTextLabel(i+1, "label"+(int)i); mRenderer.setXLabels(0); } @Override public void zoomReset() { } }, true, true); graphicalView.addPanListener(new PanListener() { @Override public void panApplied() { double start = mRenderer.getXAxisMin(); double stop = (double)mRenderer.getXAxisMax(); double step = (double)(stop - start) / 5; mRenderer.clearXTextLabels(); for (double i = start; i <= stop; i += step) mRenderer.addXTextLabel(i+1, "label"+(int)i); mRenderer.setXLabels(0); } });
実装したいカスタム ラベルは、分単位の時間です。棒グラフで TimeSeries クラスを使用してこれを行うことはできますか?