以编程方式在 Android 的 Shinobi 图表中显示 CrossHair (Xamarin)

Programmatically show CrossHair in Shinobi Charts for Android (Xamarin)

我正在尝试以编程方式(通过单独的按钮)在 Android 上的 Shinobi 图表上显示十字准线,但无法想出办法。我看过 iOS way,它基本上涉及在 chart.Crosshair.

上调用 moveToFloatingPosition

我最接近的是调用 Focus on Chart.Crosshair,但 IsActive 和 IsShown 为假,直到我长按图表。我假设这是因为 TrackedSeries 为空,所以也许可以通过编程方式设置 TrackedSeries?

shinobiChart.Crosshair.Style.LineColor = Color.Fuchsia.ToAndroid();
shinobiChart.Crosshair.CrosshairMode = Crosshair.Mode.SingleSeries;
lineSeries.CrosshairEnabled = true;
shinobiChart.Crosshair.Focus = lineSeries.DataAdapter.Get(500);  // arbitrary DataPoint - it's in the middle of the chart
shinobiChart.RedrawChart();

在 Android 版本的 shinobicharts 中,API 不允许以编程方式显示 Crosshair - 这必须完成通过用户手势(特别是长按)。

您可以利用 Android SDK 中的 MotionEvent API。这允许您以编程方式创建用户手势,因此您可以 "perform" 长按图表以显示 Crosshair

您使用 obtain() method 创建 MotionEvents - 此方法有许多重载,因此请查看文档以了解哪个最适合您的需要,但是上面链接的是最简单的。

此外,您可以使用 Axis class 上的转换方法将数据值转换为像素值,这可能有助于确保您的 MotionEvent 直接在地块面积。参见 Axis.getPixelValueForUserValue()。请注意,此方法只会在图表布局后 return 获得有效结果(但是当您通过按下按钮执行此操作时,应该不会有问题)。

我很欣赏这有点繁琐;您必须管理 "touch gestures" 并确保您不会永久 "pressing down" 在屏幕上,但总的来说它非常简单。对 Crosshair 的编程控制肯定是之前要求的,因此在我们的产品路线图上,但在现阶段我不能说这个功能何时可用。

完全公开 - 我为 shinobicontrols

工作