我正在使用 Vico 图表库进行 android jetpack 撰写。当实现 CartesianChartHost 时,有一个名为markerVisibilityListener 的参数。有人可以帮我举个例子吗?用户单击图表,图表显示一个标记。如何将标记的数据放入 Logcat 中。谢谢您的帮助。
在markerVisibilityListener参数中,我不知道该怎么办
CartesianChartHost(
chart =
rememberCartesianChart(
rememberCandlestickCartesianLayer(),
startAxis = rememberStartAxis(),
bottomAxis =
rememberBottomAxis(
guideline = null,
itemPlacer =
remember { AxisItemPlacer.Horizontal.default(spacing = 3, addExtremeLabelPadding = true) },
),
),
modelProducer = modelProducer,
marker = marker,
markerVisibilityListener = , // Here i don t know what to do
modifier = modifier,
horizontalLayout = HorizontalLayout.fullWidth(),
)
您需要实施
object : CartesianMarkerVisibilityListener {}
在其中您可以重写
onShown
、onUpdated
和 onHidden
方法。
除了标记之外,onShown
和onUpdated
还将包含一个列表在我的具体情况下,我有一个折线图,我对突出显示的点感兴趣,并且我总是只需要其中一个(最后一个)。这就是我为了获取突出显示的 x/y 值而实现的方法:
markerVisibilityListener = object : CartesianMarkerVisibilityListener {
private fun List<CartesianMarker.Target>.lastEntry() =
(lastOrNull() as LineCartesianLayerMarkerTarget?)?.points?.lastOrNull()?.entry
override fun onShown(marker: CartesianMarker, targets: List<CartesianMarker.Target>) {
targets.lastEntry()?.let {
onHighlightChanged?.invoke(it)
}
super.onShown(marker, targets)
}
override fun onUpdated(marker: CartesianMarker, targets: List<CartesianMarker.Target>) {
targets.lastEntry()?.let {
onHighlightChanged?.invoke(it)
}
super.onUpdated(marker, targets)
}
}
正如您在我的
lastEntry
扩展函数中看到的那样,我明确地转换为 LineCartesianLayerMarkerTarget,因为我只使用 LineChart。由于您使用的是 CandleStick 图表,您可能需要使用 CandlestickCartesianLayerMarkerTarget
来代替。