MPAndroidChart的MarkerView和CursorLineChartRenderer同步显示当前触摸的数据点
MarkerView和CursorLineChartRenderer同步显示当前触摸的数据点
触摸图表时,显示竖直的光标线,同时光标线和收益率曲线的交点绘制交点圆圈,交点圆圈跟随MarkerView同步显示,MarkerView显示在哪个数据点,就只需要绘制这个数据点对应的交点圆圈。
问题在于如何确定当前MarkerView显示的是哪个数据点。通常,当用户点击图表时,会触发高亮(Highlight)事件,此时MarkerView会根据高亮的数据点更新显示。因此,可能需要通过高亮事件来获取当前选中的Entry,而不是遍历所有数据集。
接下来,我需要考虑如何在高亮时获取当前的Entry。在MPAndroidChart中,当用户点击图表时,会生成一个高亮对象,其中包含数据集的索引和Entry的索引。可以利用这个信息来获取具体的Entry,而不是遍历所有数据集。
因此,修改思路应该是:在CursorLineChartRenderer中,获取当前的高亮对象,然后根据高亮对象中的数据集索引和Entry索引,获取对应的Entry,并仅绘制该Entry的圆圈。
还需要考虑如何将高亮信息传递到Renderer中。可能需要在自定义的LineChart中设置OnChartValueSelectedListener,当有高亮时,获取对应的Entry的X值,并传递给Renderer,以便在drawDataPoints中只绘制该Entry的圆圈。
总结步骤:
- 在LineChart中设置OnChartValueSelectedListener,监听高亮事件。
- 当高亮发生时,获取对应的Entry的X值,并传递给Renderer。
- 在Renderer的drawDataPoints方法中,仅绘制该X值对应的Entry,且仅绘制当前高亮的数据集中的Entry。
- 确保MarkerView的显示与高亮事件同步,即高亮时显示对应的数据点。
可能还需要修改CursorLineChartRenderer的构造函数,使其能够接收当前高亮的Entry信息,或者在Renderer中直接访问高亮状态。此外,需要确保当没有高亮时,不绘制任何圆圈,或者根据需求处理。
最后,测试修改后的代码,确保只有当MarkerView显示时,对应的数据点圆圈被绘制,其他数据点不绘制。同时,检查触摸事件和高亮事件的同步性,确保用户体验一致。