CartesianMarker
CartesianMarker
s highlight points on CartesianChart
s. There are two types of CartesianMarker
:
CartesianMarker
s are shown on tap. These are added to CartesianChart
s via the marker
constructor parameter.CartesianMarker
s are shown permanently at given x values. Such CartesianMarker
s are
added to CartesianChart
s via the persistentMarkers
constructor parameter.There are two ways of creating a CartesianMarker
:
DefaultCartesianMarker
, described belowDefaultCartesianMarker
A common means of creating CartesianMarker
s is DefaultCartesianMarker
, which accepts three main components—a label, a point indicator, and a vertical line—and offers several customization options.
A DefaultCartesianMarker
’s label text is created by its CartesianMarkerValueFormatter
. A dedicated formatting contract is required here because CartesianMarker
s can highlight multiple points at once. The general principle is the same as with CartesianValueFormatter
, but the required information must first be retrieved from targets
(2.9.4).
The default CartesianMarkerValueFormatter
implementation is DefaultCartesianMarkerValueFormatter
, which uses DecimalFormat
to format y values. DefaultCartesianMarkerValueFormatter
lets you provide a custom DecimalFormat
instance and toggle the color-coding of y values. You can use a custom DecimalFormat
instance not only to change how the y values themselves are formatted, but also to add prefixes and suffixes.
DefaultCartesianMarker
is open for subclassing.
See 5.5 for DefaultCartesianMarker
creation in Compose.
CartesianMarkerVisibilityListener
You can listen for visibility changes of standard CartesianMarker
s via CartesianMarkerVisibilityListener
.
CartesianMarker.Target
CartesianMarker
s use CartesianMarker.Target
s, which hold information on the highlighted points.
They are stored in lists (called targets
), since several points may be highlighted at once.
CartesianMarker.Target
s itself includes only general properties. More data is found in its implementations,
each of which corresponds to a CartesianLayer
: CandlestickCartesianLayerMarkerTarget
,
ColumnCartesianLayerMarkerTarget
, and LineCartesianLayerMarkerTarget
.
In general, you should take the following approach when working with targets
:
targets.first()
. (This occurs when each point has a
unique pixel x coordinate—for example, when only a single-series LineCartesianLayerMarkerTarget
is
present.) Otherwise, iterate targets
.CartesianMarker.Target
is present, use casting. (This occurs when only one
kind of CartesianLayer
is in use.) Otherwise, use type checking (when
with is
).