我正在使用具有缩放功能的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;
}
}
答案 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值。
希望有所帮助。