如何知道 Oxyplot 中的缩放级别 - PlotView With DateTimeAxes

How to know zoom level in Oxyplot -PlotView With DateTimeAxes

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

默认情况下,实时数据 majorstep 设置为 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;
        }
}

我只使用了 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 值。

希望对您有所帮助。