我正在尝试使用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