2013-05-07 91 views
1

我正在嘗試使用AChartEngine爲我創建的應用程序構建真正簡化的圖表。使用存儲在全局類中的數據,我試圖創建一個水平條形圖,在每條線上顯示一個單獨的變量,以及不可見的軸,並在每個相應的條的末尾顯示每個變量的值。它應該看起來好像每個變量都保存在TableLayout的單獨TableRow中,並且每個欄位於相應行的下一列中,並且該欄旁邊的變量值(或第三列)。AChartEngine似乎沒有響應我的命令

我知道如何做這些東西,理論上,還沒有弄清楚其他部分。我有以下簡單的設置,我從一個教程衍生和一些示例代碼提供:

private GraphicalView mChart; 

private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset(); 

private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); 

private XYSeries mCurrentSeries; 

private XYSeriesRenderer mCurrentRenderer; 

private void initChart() { 
    mCurrentSeries = new XYSeries("Sample Data"); 
    mDataset.addSeries(mCurrentSeries); 
    mCurrentRenderer = new XYSeriesRenderer(); 
    mRenderer.addSeriesRenderer(mCurrentRenderer); 
    mRenderer.setOrientation(Orientation.VERTICAL); 
    mRenderer.addXTextLabel(1, "xyzxyzxyz"); 
    mRenderer.addXTextLabel(2, "abcabca"); 
    mRenderer.addXTextLabel(3, "tqrstuvwx"); 
    mRenderer.setBarSpacing(1); 
    mRenderer.setApplyBackgroundColor(true); 
    mRenderer.setMargins(new int[]{0,0,0,0}); 
    mRenderer.setBackgroundColor(Color.TRANSPARENT); 
    mRenderer.setShowLegend(false); 
    mRenderer.setShowLabels(true); 
    mRenderer.setShowAxes(false); 
    mRenderer.setZoomEnabled(false, false); 
    mRenderer.setPanEnabled(false, false); 
    mRenderer.setGridColor(Color.TRANSPARENT); 
} 

private void addSampleData() { 
    mCurrentSeries.add(1, 85); 
    mCurrentSeries.add(2, 75); 
    mCurrentSeries.add(3, 70); 
} 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

protected void onResume() { 
    super.onResume(); 
    LinearLayout layout = (LinearLayout) findViewById(R.id.chart); 
    if (mChart == null) { 
     initChart(); 
     addSampleData(); 
     mChart = ChartFactory.getBarChartView(this, mDataset, mRenderer, Type.DEFAULT); 
     layout.addView(mChart); 
    } else { 
     mChart.repaint(); 
    } 
} 

我已經得到了有關的代碼如下問題:

  1. 我收集的是渲染器是你做的工作,你知道,渲染圖表。但是,在我的情況下,mRenderermCurrentRenderer之間有什麼區別?

  2. 現在,setShowAxes()false,但軸仍在顯示。這是爲什麼?

  3. setShowLabels()true,這似乎是正確的,因爲我需要變量來顯示,但圖表的x軸被定位爲使其擠壓任何變量標籤。我該如何讓x軸給出足夠的空間來顯示最長的變量,或者在一定數量的字符之後包裝標籤的文本?

  4. 我不希望這個圖表看起來像一個典型的圖表,我希望它顯示,如上所述。實現這一目標的一部分是將背景顏色設置爲透明。我這樣做了,但它仍然顯示爲黑色,即使父級佈局的背景顏色爲D0E4F7。我也用setGridColor(Color.TRANSPARENT),似乎工作,使網格顏色成爲我的佈局背景顏色。但是,我仍然需要網格外部的背景是透明的。

  5. 我使用setBarSpacing(),似乎工作正常,但我也需要設置每個欄的寬度。我可以用什麼方法來做到這一點?

  6. 我需要圖表不填充整個視圖,而是適合視圖的特定部分。圖表的LinearLayout將包裝在RelativeLayoutScrollView中,以便將其正確放置在屏幕上。在XML中,我設置了layout_weight="0"並指定layout_height="200dp"。這是有效的,但是會導致所有文本垂直「擠壓」。如何在避免這種情況下調整大小?

  7. 是AChartEngine甚至是正確的圖書館使用這個,或者我想適合一個方形釘入圓孔?

感謝您的任何和所有幫助。我很高興根據需要發佈更多代碼片段。

編輯:後續丹的答覆:

(1)感謝您的解釋,那肯定有幫助。我假設他們都可以在initChart()方法中被調用?

(2)顯示X軸和Y軸。

(3)有沒有辦法移動軸?您鏈接的文章與我的文章不一樣。我的標籤在網格之外,而不是在酒吧上,但在蜱上。 (4)我意識到我從來沒有真的問過這裏的問題 - 我如何設置網格周圍的區域是透明的?

(5)我不確定這是什麼意思?我可以用什麼方法手動設置每個欄的寬度? (6)我不確定你爲什麼跳過這個 - 你是否暗示它涉及(3)?

(7)這裏是我真的認爲你誤解我來自哪裏的地方。我並不懷疑AChartEngine的有效性和質量 - 我選擇開始使用它,因爲很多人都認爲它是一種質量選擇。當我說「似乎沒有迴應我的命令」時,我並不是故意暗示它沒有反應,我認爲很明顯,我無法讓它做我想做的事情。

當我問(7)時,我想知道的是,如果AChartEngine確實是正確的選擇,或者如果我期望它做的事情不是它的目的?當我構建一個條形圖,然後選擇刪除所有功能(座標軸,標籤,背景,動態縮放等),並在設定的比例尺上僅顯示條形本身(因此使用AChartEngine可以創建一個條形圖酒吧在一個給定的輸入變量給定的長度),我想知道我是否正在使用飛機去雜貨店的圖表等效。

我原本希望這篇文章能夠引出「是的,這是正確的選擇,有道理」,或者「不,你試着用手榴彈去打獵,你可以做你所做的想要一個更簡單的方式「。我認爲這是一個合法的問題,一個不應該冒犯你的問題。僅僅因爲它在過去5000多個應用程序中工作並不意味着它是我想要做的正確解決方案。任何建設性的想法,你是否真的是正確的選擇將不勝感激。

回答

0
  1. mCurrentRenderer定義了當前系列是同時mRenderer定義整個圖表是要顯示在一般的方式被顯示的方式。
  2. 還在顯示哪些軸?如果你說的是真的,那麼這可能被稱爲潛在的錯誤。我也不知道你正在嘗試使用哪種版本的AChartEngine。你可以請張貼截圖嗎?
  3. 已知的水平條形圖issue。移動軸:renderer.setMargins([top, left, bottom, right]);
  4. 嘗試renderer.setMarginsColor(color)
  5. setBarWidth()可用於只有一個項目的系列(一個系列中的一個單一欄)。對於其他系列,您可以使用參數setBarSpacing()來改變條寬度作爲副作用。
  6. 使用renderer.setInScroll(true);
  7. 對於顯示大量圖表類型,AChartEngine絕對是一個不錯的選擇。但是,水平條形圖(橫條顯示)處於實驗模式,我通常不建議任何人使用它,除非他們真的想。當然還有其他一些製圖引擎,但我從來沒有評估過它,所以我不能說它有更好的或者其他的有多好。也許時間會證明。

一旦你明白了這一點,如果你將繼續使用AChartEngine路線,那麼我建議你僅僅在一個問題上發佈簡短的問題。否則,這些難以一起回答,或者可能永遠無法解決。

+0

丹,謝謝你的迴應。我已經在原文中對我的編輯中的每個回覆進行了跟蹤。我期待着你的回覆。 – user2163853 2013-05-07 14:42:19

+0

@ user2163853我更新了大部分答案。請再檢查一次。 – 2013-05-08 11:16:24

+0

嘿謝謝丹。這些答案絕對有幫助。我打算今晚試着實施,看看它在哪裏。我感謝您的幫助。 – user2163853 2013-05-08 14:32:52