Vico图表android:markerVisibilityListener参数

问题描述 投票:0回答:1

我正在使用 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(),
    )
android kotlin graph charts android-jetpack-compose
1个回答
0
投票

您需要实施

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
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.