首页 文章

AChartEngine似乎没有响应我的命令

提问于
浏览
1

我'm trying to use AChartEngine to build a really, really simplified chart for an app I' m创造 . 使用存储在全局类中的数据,我正在尝试创建一个水平条形图,在每条线上显示一个变量,使用不可见的轴,并在每个相应条的末尾显示每个变量的值 . 它应该看起来几乎就像每个变量都保存在 TableLayout 的单独 TableLayout 中,并且每个条形都位于相应行的下一列中,该变量的值位于条形(或第三列)旁边 .

从理论上讲,我知道如何做一些这样的事情,还没有弄清楚其他部分 . 我有一个简单的设置,我从一个教程和一些提供的示例代码派生出来:

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();
    }
}

我有关于代码的以下问题:

  • 我已经认识到渲染器是你所知道的渲染图表的工作 . 但在我的情况下, mRenderermCurrentRenderer 之间有什么区别?

  • 现在, setShowAxes()false ,但轴仍在显示 . 这是为什么?

  • setShowLabels()true ,这似乎是正确的,因为我需要显示变量,但图表的x轴定位使得它搜索任何变量标签 . 如何使x轴提供足够的空间来显示最长的变量,或者在一定数量的字符后包装标签的文本?

  • 我不希望这个图表看起来像一个典型的图表,我希望它如上所述显示 . 实现此目的的一部分是将背景颜色设置为透明 . 我这样做了,但即使父布局的背景颜色是 D0E4F7 ,它仍然显示为黑色 . 我也使用 setGridColor(Color.TRANSPARENT) ,这似乎工作,允许网格颜色成为我的布局背景颜色 . 但是,我仍然需要网格外部区域的背景是透明的 .

  • 我正在使用 setBarSpacing() ,这似乎工作正常,但我还需要设置每个条的宽度 . 我可以使用什么方法来做到这一点?

  • 我需要图表不填充整个视图,而是适合视图的特定部分 . 图表的 LinearLayout 将包装在 RelativeLayoutScrollView 中,以便将其正确放置在屏幕上 . 在XML中,我设置了 layout_weight="0" 并指定了 layout_height="200dp" . 这有效,但会导致所有文本垂直"squished" . 如何在避免这种情况下调整大小?

  • AChartEngine甚至是正确使用的库,还是我试图将方形钉固定在圆孔中?

感谢您的帮助 . 我很乐意根据需要发布更多代码片段 .

编辑:Dan的回复的后续行动:

(1)感谢您的解释,这肯定有帮助 . 我假设他们都可以在 initChart() 方法中调用?

(2)X轴和Y轴都显示 .

(3)有没有办法移动轴?您链接的文章与我的问题不同 . 我的标签在网格之外,不在条形图上,而是在标记上 .

(4)我意识到我从未在这里问过一个问题 - 如何将网格周围的区域设置为透明?

(5)我不确定你的意思是什么?我可以使用什么方法手动设置每个条的宽度?

(6)我不确定你为什么要跳过这个 - 你暗示它与(3)有关吗?

(7)在这里,我真的认为你错误地解释了我来自哪里 . 我并不怀疑AChartEngine的有效性或质量 - 我选择开始使用它,因为很多人都认为它是一种高质量的选择 . 当我说“似乎没有响应我的命令”时,我并不是故意暗示它没有反应,我认为很明显我根本无法让它做我想做的事 .

当我问(7)时,我想知道AChartEngine是否真的是正确的选择,或者我是否期望它做一些不是为了做的事情?当我构建一个条形图,然后选择删除所有功能(轴,标签,背景,动态比例等),并在字面上只显示条形图本身(因此使用AChartEngine,因为它能够创建一个给定输入变量的指定长度的条形图),我想知道我是否正在使用飞机到达杂货店的图表 .

我希望,在某种程度上,这篇文章会引出“是的,这是正确的选择,这是有道理的”,或者“不,你试图用手榴弹打猎,你可以做多少你想要的东西更简单的方式“ . 我认为这是一个合法的问题,而且是一个问题不要冒犯你一点儿 . 仅仅因为它过去适用于5000个应用程序并不意味着它是我正在尝试做的正确的解决方案 . 任何有关它是否实际上是正确选择的建设性想法都将非常感激 .

1 回答

  • 0
    • mCurrentRenderer 定义了当前系列的显示方式,而 mRenderer 定义了整个图表的显示方式 .

    • 还有哪些轴显示?如果你说的是真的那么这可能被称为潜在的错误 . 我也不知道你试图使用什么版本的AChartEngine . 你能发一个截图吗?

    • 水平条形图已知issue . 移动轴: renderer.setMargins([top, left, bottom, right]);

    • 试试 renderer.setMarginsColor(color) .

    • setBarWidth() 可用于仅包含一个项目的系列(系列中的一个单个栏) . 对于其他系列,您可以使用 setBarSpacing() 参数来更改条形宽度作为副作用 .

    • 使用 renderer.setInScroll(true);

    • AChartEngine绝对是显示大量图表类型的不错选择 . 然而,水平条形图(水平显示条形图)处于实验模式,我通常不会评估一个,所以我不能说它有一个更好或其他有多好 . 也许时间会证明 .

    一旦你搞清楚了,如果你继续使用AChartEngine路线,我建议你只用一个问题就可以发布更短的问题了 . 否则,这些很难一起回答,或者可能需要永远弄明白 .

相关问题