2013-05-06 100 views
1

保留默認縮放/平移功能如何將自定義x軸標籤應用於我的AChartEngine BarGraph,同時保持與使用默認標籤時相同的縮放/平移功能?問題是我有100多個數據點,所以我只想一次在屏幕上繪製5或6個標籤。Android - 如何使用自定義x軸標籤使用AChartEngine

默認功能最初繪製3個標籤(在我的情況下爲0,50和100),當放大時繪製4/5個標籤。搖向左或向右時,將標籤移動以及相應的條:

enter image description here enter image description here

我曾嘗試兩種方法但是他們都沒有給我相同的縮放和平移功能的默認標籤。

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類來完成嗎?

回答

1

您的解決方案是相當不錯的,所以我只能建議改進用於獲取到您需要的標籤行爲:使用MathHelper.getLabels(start, stop, approxNumLabels)代替startstop之間的for循環。

所以你for循環會變得這樣的事情:

List<Double> labels = MathHelper.getLabels(start, stop, 10); 
for (Double label : labels) { 
    mRenderer.addXTextLabel(label, "label " + label); 
} 
+0

你有一人將如何使用這樣的例子?我試圖看看文檔,並不能真正弄清楚。 – McLovin 2013-05-06 20:57:08

+0

查看我的更新回答。 – 2013-05-07 06:54:25

+0

謝謝!那就是訣竅。 – McLovin 2013-05-07 14:21:24