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

标签 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;
        }
}

最佳答案

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

希望对您有所帮助。

关于android - 如何知道 Oxyplot 中的缩放级别 - PlotView With DateTimeAxes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32962337/

相关文章:

android - Xamarin 部署到设备

c# - 如何以编程方式将 UI 元素正确添加到 iOS View 中?

c# - 如何使用 OxyPlot 在 Xamarin.Forms 可移植应用程序中创建图表?

c# - WPF 和 OxyPlot : Checkable ContextMenu, 动态生成

android - 在 Google Play 上为 Android 订阅启用免费试用

java - 更改android应用程序自适应可绘制对象?

java - 无法使用 Intent 和 Parcelable 传输对象

c# - 在 Xamarin 项目中隐藏 Azure 凭据和连接字符串的最佳方法

android - 无法在条形图中重新定位轴 OxyPlot xamarin

java - 在按下另一个 Activity 的按钮时清除 recyclerview