如何通过DateTimeAxes了解Oxyplot -PlotView中的缩放级别

时间:2015-10-06 05:27:36

标签: android xamarin oxyplot

我正在使用具有缩放功能的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;
        }
}

1 个答案:

答案 0 :(得分:3)

我只使用了Oxyplot的WPF版本,所以希望Android / IOS类似。据我所见,它没有办法确定放大vs输出。但是,您可以使用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值。

希望有所帮助。