我正在嘗試使用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();
}
}
我已經得到了有關的代碼如下問題:
我收集的是渲染器是你做的工作,你知道,渲染圖表。但是,在我的情況下,
mRenderer
和mCurrentRenderer
之間有什麼區別?現在,
setShowAxes()
是false
,但軸仍在顯示。這是爲什麼?setShowLabels()
是true
,這似乎是正確的,因爲我需要變量來顯示,但圖表的x軸被定位爲使其擠壓任何變量標籤。我該如何讓x軸給出足夠的空間來顯示最長的變量,或者在一定數量的字符之後包裝標籤的文本?我不希望這個圖表看起來像一個典型的圖表,我希望它顯示,如上所述。實現這一目標的一部分是將背景顏色設置爲透明。我這樣做了,但它仍然顯示爲黑色,即使父級佈局的背景顏色爲
D0E4F7
。我也用setGridColor(Color.TRANSPARENT)
,似乎工作,使網格顏色成爲我的佈局背景顏色。但是,我仍然需要網格外部的背景是透明的。我使用
setBarSpacing()
,似乎工作正常,但我也需要設置每個欄的寬度。我可以用什麼方法來做到這一點?我需要圖表不填充整個視圖,而是適合視圖的特定部分。圖表的
LinearLayout
將包裝在RelativeLayout
和ScrollView
中,以便將其正確放置在屏幕上。在XML中,我設置了layout_weight="0"
並指定layout_height="200dp"
。這是有效的,但是會導致所有文本垂直「擠壓」。如何在避免這種情況下調整大小?是AChartEngine甚至是正確的圖書館使用這個,或者我想適合一個方形釘入圓孔?
感謝您的任何和所有幫助。我很高興根據需要發佈更多代碼片段。
編輯:後續丹的答覆:
(1)感謝您的解釋,那肯定有幫助。我假設他們都可以在initChart()
方法中被調用?
(2)顯示X軸和Y軸。
(3)有沒有辦法移動軸?您鏈接的文章與我的文章不一樣。我的標籤在網格之外,而不是在酒吧上,但在蜱上。 (4)我意識到我從來沒有真的問過這裏的問題 - 我如何設置網格周圍的區域是透明的?
(5)我不確定這是什麼意思?我可以用什麼方法手動設置每個欄的寬度? (6)我不確定你爲什麼跳過這個 - 你是否暗示它涉及(3)?
(7)這裏是我真的認爲你誤解我來自哪裏的地方。我並不懷疑AChartEngine的有效性和質量 - 我選擇開始使用它,因爲很多人都認爲它是一種質量選擇。當我說「似乎沒有迴應我的命令」時,我並不是故意暗示它沒有反應,我認爲很明顯,我無法讓它做我想做的事情。
當我問(7)時,我想知道的是,如果AChartEngine確實是正確的選擇,或者如果我期望它做的事情不是它的目的?當我構建一個條形圖,然後選擇刪除所有功能(座標軸,標籤,背景,動態縮放等),並在設定的比例尺上僅顯示條形本身(因此使用AChartEngine可以創建一個條形圖酒吧在一個給定的輸入變量給定的長度),我想知道我是否正在使用飛機去雜貨店的圖表等效。
我原本希望這篇文章能夠引出「是的,這是正確的選擇,有道理」,或者「不,你試着用手榴彈去打獵,你可以做你所做的想要一個更簡單的方式「。我認爲這是一個合法的問題,一個不應該冒犯你的問題。僅僅因爲它在過去5000多個應用程序中工作並不意味着它是我想要做的正確解決方案。任何建設性的想法,你是否真的是正確的選擇將不勝感激。
丹,謝謝你的迴應。我已經在原文中對我的編輯中的每個回覆進行了跟蹤。我期待着你的回覆。 – user2163853 2013-05-07 14:42:19
@ user2163853我更新了大部分答案。請再檢查一次。 – 2013-05-08 11:16:24
嘿謝謝丹。這些答案絕對有幫助。我打算今晚試着實施,看看它在哪裏。我感謝您的幫助。 – user2163853 2013-05-08 14:32:52