【问题标题】:Android - How to keep default zoom/pan features with custom x-axis labels using AChartEngineAndroid - 如何使用 AChartEngine 使用自定义 x 轴标签保留默认缩放/平移功能
【发布时间】:2013-05-07 20:26:12
【问题描述】:

如何将自定义 x 轴标签应用于我的 AChartEngine 条形图,同时保持与使用默认标签时相同的缩放/平移功能?问题是我有 100 多个数据点,所以我一次只想在屏幕上绘制 5 或 6 个标签。

默认功能最初绘制 3 个标签(在我的例子中是 0、50 和 100),放大时会绘制 4/5 个标签。向左或向右平移时,标签会随着相应的条形移动:

我尝试了两种方法,但它们都没有提供与默认标签相同的缩放和平移功能。

1) 首次创建图表时生成 5 个等距标签。

  • 这样做的问题是它只创建 5 个标签,因此当您放大得太远时,不会显示任何标签。

    //For 100 data points, add five labels every 20 datapoints
    mRenderer.addXTextLabel(0, "label 1");
    mRenderer.addXTextLabel(20, "label 2");
    mRenderer.addXTextLabel(40, "label 3");
    mRenderer.addXTextLabel(60, "label 4");
    mRenderer.addXTextLabel(80, "label 5");
    mRenderer.setXLabels(0);
    

2) 在我的 GraphicalView 上实现 ZoomListener 和 PanListener 接口。

  • 此解决方案几乎可以工作,但是标签始终位于固定位置,并且在向左或向右平移图形时会使用新值“更新”。我需要它们与相应的条一起移动。

    graphicalView.addZoomListener( new ZoomListener() {
        @Override
        public void zoomApplied(ZoomEvent e) {
            double start = mRenderer.getXAxisMin();
            double stop = (double)mRenderer.getXAxisMax();
            double step = (double)(stop - start) / 5;
            mRenderer.clearXTextLabels();
            for (double i = start; i <= stop; i += step) 
                mRenderer.addXTextLabel(i+1, "label"+(int)i);
            mRenderer.setXLabels(0);
          }
    
        @Override
        public void zoomReset() { }
    }, true, true);
    
    graphicalView.addPanListener(new PanListener() {
        @Override
        public void panApplied() {
            double start = mRenderer.getXAxisMin();
            double stop = (double)mRenderer.getXAxisMax();
            double step = (double)(stop - start) / 5;
            mRenderer.clearXTextLabels();
            for (double i = start; i <= stop; i += step) 
                mRenderer.addXTextLabel(i+1, "label"+(int)i);
            mRenderer.setXLabels(0);                
        }
    });
    

我想要实现的自定义标签是以分钟为单位的时间。这可以使用 带条形图的 TimeSeries 类?

【问题讨论】:

    标签: android graph label achartengine


    【解决方案1】:

    您的解决方案非常好,所以我只能建议对您需要的标签行为进行改进:使用MathHelper.getLabels(start, stop, approxNumLabels) 而不是startstop 之间的for 循环。

    所以你的for 循环会变成这样:

    List<Double> labels = MathHelper.getLabels(start, stop, 10);
    for (Double label : labels) {
      mRenderer.addXTextLabel(label, "label " + label);
    }
    

    【讨论】:

    • 你有一个如何使用它的例子吗?我尝试查看文档并无法真正弄清楚。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多