2013-05-07 89 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