本节主题是重点介绍通过tap-gesture和基于发行版 v3.0.0 以编程方式突出显示图表中条目。
启用/禁用突出显示
- setHighlightPerDragEnabled(boolean enabled):在Chart 上将此设置为true,以便在完全缩小时在图表表面上进行每次拖动时突出显示,默认值:true
- setHighlightPerTapEnabled(boolean enabled):在Chart 上将此设置为false,以防止通过点击手势突出显示值。仍可通过拖动或以编程方式突出显示值,默认值:true
- setMaxHighlightDistance(float distanceDp):设置dp中的最大高亮距离。在图表上轻敲远离条目的距离不会触发突出显示。默认值:500dp
除此之外,还可以为单个DataSet对象配置突出显示:
dataSet.setHighlightEnabled(true); // allow highlighting for DataSet
// set this to false to disable the drawing of highlight indicator (lines)
dataSet.setDrawHighlightIndicators(true);
dataSet.setHighlightColor(Color.BLACK); // color for highlight indicator
// and more...
以编程方式突出显示
- highlightValue(float x, int dataSetIndex, boolean callListener):突出显示给定DataSet中给定x坐标的值。提供-1作为dataSetIndex以撤消所有突出显示。布尔标志确定应该调用选择监听器还是不调用选择侦听器。
- highlightValue(Highlight high, boolean callListener):突出显示提供的Highlight对象所代表的值。提供null以撤消所有突出显示。布尔标志确定应该调用选择侦听器还是不调用选择监听器。
- highlightValues(Highlight[] highs):突出显示给定Highlight[]数组表示的值。提供null或空数组以撤消所有突出显示。
- getHighlighted():返回一个Highlight[]数组,其中包含有关所有突出显示的条目,x-index和dataset-index的信息。
选择回调
该库在交互时为回调提供了许多监听器。其中一个是OnChartValueSelectedListener,通过触摸突出显示值时的回调:
public interface OnChartValueSelectedListener { /** * Called when a value has been selected inside the chart. * * @param e The selected Entry. * @param h The corresponding highlight object that contains information * about the highlighted position */ public void onValueSelected(Entry e, Highlight h); /** * Called when nothing has been selected or an "un-select" has been made. */ public void onNothingSelected(); } }
只需让你的接收回调的类实现这个接口并将其设置为图表的监听器:
chart.setOnChartValueSelectedListener(this);
Highlight类
Highlight类表示与突出显示的Entry关联的所有数据,例如突出显示的Entry对象本身,它所属的DataSet,它在绘图表面上的位置等等。它可用于获取有关已突出显示的条目的信息,或用于向图表提供信息以突出显示条目。为了这个目的,Highlight该类提供了两个构造函数:
/** constructor for standard highlight */
public Highlight(float x, int dataSetIndex) { ... }
/** constructor for stacked BarEntry highlight */
public Highlight(float x, int dataSetIndex, int stackIndex) { ... }
这些构造函数可用于创建Highlight对象,该对象允许以编程方式执行突出显示:
// highlight the entry and x-position 50 in the first (0) DataSet
Highlight highlight = new Highlight(50f, 0);
chart.highlightValue(highlight, false); // highlight this value, don't call listener
定制荧光笔
高亮手势形式的所有用户输入都由默认的ChartHighlighter类在内部处理。可以使用以下方法用自定义实现替换默认的highligher:
- setHighlighter(ChartHighlighter highlighter):为图表设置自定义highligher对象,以 handles / processes在图表视图上执行的所有高亮触摸事件。您的自定义荧光笔对象需要扩展该ChartHighlighter类。