【问题标题】:Cross-Device Compatibility Issue of AChartEngine Bar GraphAChartEngine条形图的跨设备兼容性问题
【发布时间】:2013-07-16 22:40:51
【问题描述】:

我可以在Dan 的帮助下在一个 7" 平板电脑模拟器中开发一个条形图,并使其适合这个屏幕,我使用了setXAxisMax()setXAxisMin()。这是我获得的图表模拟器:

但是当我将它安装到不同屏幕的手机时,它看起来像这样:

肖像

风景

这是我的代码:

........................
        XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
        mRenderer.setChartTitle("Submission Statistics");
//      mRenderer.setXTitle("Verdict Code");
//      mRenderer.setYTitle("No. of Submissions");
        mRenderer.setAxesColor(Color.BLACK);
        mRenderer.setApplyBackgroundColor(true);
        mRenderer.setBackgroundColor(Color.WHITE);
        mRenderer.setMarginsColor(Color.WHITE);
        mRenderer.setZoomEnabled(true);
//      mRenderer.setBarSpacing(-0.5);
//      mRenderer.setMargins(new int[] {20, 30, 15, 0});
//      mRenderer.setShowLegend(false);
        mRenderer.setAxisTitleTextSize(16);
        mRenderer.setChartTitleTextSize(22);
        mRenderer.setLabelsTextSize(15);
        mRenderer.setLegendTextSize(15);
        // mRenderer.addXTextLabel(1, "AC");
        // mRenderer.addXTextLabel(2, "PE");
        // mRenderer.addXTextLabel(3, "WA");
        // mRenderer.addXTextLabel(4, "TL");
        // mRenderer.addXTextLabel(5, "ML");
        // mRenderer.addXTextLabel(6, "CE");
        // mRenderer.addXTextLabel(7, "RE");
        // mRenderer.addXTextLabel(8, "OT");
        mRenderer.setBarWidth(80);
        mRenderer.setXAxisMin(-6);
        mRenderer.setXAxisMax(15);
        mRenderer.setYAxisMax(311);
        mRenderer.setYAxisMin(0);
        mRenderer.setYLabelsAlign(Align.RIGHT);
        mRenderer.setXLabelsColor(Color.BLACK);
        mRenderer.setLabelsColor(Color.BLACK);
        mRenderer.setYLabelsColor(0, Color.BLACK);
        mRenderer.setXLabels(0);
            mRenderer.setPanEnabled(true, false);
........................

我现在添加mRenderer.setPanEnabled(true, false);,这样我就可以仅沿​​ x 轴移动以查看完整的图表。但无论使用不同的设备,用户都应该在屏幕上看到完整的图表。

如何让这个条形图跨设备兼容,不至于左右截断?

【问题讨论】:

  • 我也会对这个结果感兴趣,我最近一直在使用 ACE。我一直在做的一件事,不确定它是否会帮助你,就是只获取图形视图而不是意图。通过这种方式,您可以获得图表,然后您可以将其放入您为其保留空间的线性布局中,它会自动适应分配的空间。不过,我只用我的 10 英寸平板电脑做到了这一点,不确定它在不同尺寸上的效果如何。
  • 当我在 Fragment 中显示它时,我也通过图形视图来完成它。我也将它放在线性布局中。在不同的设备上尝试你的一个以确保。如果可以,请与我分享您的代码:)
  • 不幸的是,这是我唯一的设备,所以我无法在较小的设备上进行测试。我从来没有使用过片段,所以我不能真正和那些说话,但也许这就是这里的区别。尝试使用简单的线性布局设置一个测试项目,然后以编程方式在 Activity 中添加条形图的图形视图,看看它是否按照您想要的方式工作。

标签: android achartengine


【解决方案1】:

setXAxisMin()setXAxisMax() 调用设置图表的比例,而不是图表的大小。

尝试减小传递给setBarWidth() 的值。我希望图形的总宽度由 num_bars * (X+Y) 给出,其中 X 和 Y 被传递给 (setBarWidth(X) + setBarSpacing(Y))。

我从未使用 ACE 构建过条形图,但我认为应该根据实际窗口宽度和图表中的条形数来计算。希望对您有所帮助。

【讨论】:

  • 是否应该根据运行时计算的设备宽度和高度来渲染图形?
  • 是的,这基本上就是我的建议。要么将您的图表放在滚动视图中,以便用户可以滚动它,但我认为这不是您想要的。也可能是如果您根本不调用 setBarWidth(),那么 ACE 会为您计算正确的宽度,但我没有尝试或阅读代码来知道它是否这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多