【问题标题】:How to know zoom level in Oxyplot -PlotView With DateTimeAxes如何使用 DateTimeAxes 了解 Oxyplot -PlotView 中的缩放级别
【发布时间】:2015-10-06 05:27:35
【问题描述】:

我正在使用启用了缩放功能的 oxyplot android/IOS。我还使用 PlotView 和 DateTimeAxes 来显示实时数据。

默认情况下,实时数据主要步长设置为 1/60。当用户放大时,我将 MajorStep 设置为 1/60/24。到这里为止一切都很好。

当用户缩放时我无法确定:

  1. 用户正在放大或缩小。
  2. 我目前处于哪个缩放级别。

代码:

 protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        this.RequestWindowFeature (WindowFeatures.NoTitle);

        plotView = new PlotView(this) {
            Model = myClass.MyModel
        };
        (plotView.Model.Axes[0] as DateTimeAxis).AxisChanged += HandleAxisChanged;
        this.AddContentView (
            plotView, 
            new ViewGroup.LayoutParams (
                ViewGroup.LayoutParams.MatchParent, 
                ViewGroup.LayoutParams.MatchParent));
        LoadGraph();
    }

下面的轴改变事件函数

void  HandleAxisChanged(object sender, AxisChangedEventArgs e) {
        switch (e.ChangeType) 
        {
        case AxisChangeTypes.Zoom:
        ((OxyPlot.Axes.DateTimeAxis)sender).MajorStep = 1.0 / 60 / 24;
        break;
        }
}

【问题讨论】:

    标签: android xamarin oxyplot


    【解决方案1】:

    我只使用了 Oxyplot 的 WPF 版本,所以希望 Android/IOS 是相似的。据我所见,它没有办法确定放大与缩小。但是,您可以使用 DateTimeAxis 中的“ActualMinimum”和“ActualMaximum”字段访问当前缩放坐标,如下所示:

    double ZoomRange = 60; //Tweak to find the range you want the zoom to switch at
    
    if (e.ChangeType == AxisChangeTypes.Zoom)
    {
        var axis = sender as DateTimeAxis;
        if (axis != null)
        {
            var xAxisMin = axis.ActualMinimum;
            var xAxisMax = axis.ActualMaximum;
    
            var delta = xAxisMax - xAxisMin;
    
            if(delta < ZoomRange)
                axis.MajorStep = 1.0/60/24;
            else
                axis.MajorStep = 1.0/60;
        }
    }
    

    从那里您可能只需要做一些数学运算来跟踪之前的缩放状态并根据一些硬编码的缩放值调整您的 MajorStep 值。

    希望对您有所帮助。

    【讨论】:

    • 像魅力一样工作。谢谢你。非常感谢。一个问题,你是怎么知道这会起作用的?坦率地说,我完全处于黑暗之中,没有适当的文件,什么都没有。但无论如何,非常感谢:)
    • 我的应用程序遇到了一些重大问题,所以我最终下载了他们的源代码并四处寻找了几天。他们在这里的各个线程中也进行了大量讨论:General forums
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多