MPAndroidChart设置中心垂直线

MPAndroidChart设置中心垂直线,android,charts,mpandroidchart,Android,Charts,Mpandroidchart,我想在折线图的中心设置一条垂直线,如下所示: 当滚动到每个点时,它可以通知更改下面的日期(橙色日期字段)。它可以通过单击箭头按钮以编程方式向左或向右移动 目前,我可以使用以下代码设置视口并允许移动到中心: LineData data = new LineData(xVals, dataSets); mChart.setScaleMinima((float) data.getXValCount() / 7f, 1f); mChart.moveViewTo(0, 7, YAxis.AxisDepe

我想在
折线图的中心设置一条垂直线,如下所示:

当滚动到每个点时,它可以通知更改下面的日期(橙色日期字段)。它可以通过单击箭头按钮以编程方式向左或向右移动

目前,我可以使用以下代码设置视口并允许移动到中心:

LineData data = new LineData(xVals, dataSets);
mChart.setScaleMinima((float) data.getXValCount() / 7f, 1f);
mChart.moveViewTo(0, 7, YAxis.AxisDependency.LEFT);
并得到结果:

如何绘制和设置如上所示的垂直线

更新


对于监听器,我认为
OnChartGestureListener
onChartTranslate(MotionEvent me、float dX、float dY)
可能会有所帮助。我需要的是两个点之间的距离以及如何计算当前视口中有多少个点。有人知道吗?

看看这个方法

protected void drawGridBackground(Canvas c) {
在BarLineChartBase类中(线型图的父级)。在这个方法中,你有所有数据在中间画直线。 像这样的

RectF rectF = mViewPortHandler.getContentRect();
float xMiddle = (rectF.right - rectF.left)/2;
Paint p = new Paint();
p.setColor(Color.BLACK);
c.drawLine(xMiddle, rectF.bottom, xMiddle, rectF.top, p);
您是否尝试在图表上使用提供图表中心的x和y坐标

公共入口getEntryByTouchPoint(浮点x,浮点y)

返回显示在图表触摸位置的
条目
对象


也许已经太晚了,但这是我的答案。它使用图表(iOS的MPAndroidCharts端口)在Swift中编码,但API 99%相同;)

这将在xValue变量定义的点上显示一条垂直线


希望有帮助

您可以使用
FrameLayout
@activesince93添加类似于第一个图像的线条。如何使其居中,以及如何知道每个节点何时以这种方式滚动到此线条?如何检测图形是否已完成滚动。我不是在问图表的结尾。当我们滚动时,我们如何才能检测到图形的滚动已完成?@Kanagalingam您应该阅读wiki并尝试调试以找出答案,它可能是
onChartGestureEnd
onChartTranslate
,如我所知remember@R4j谢谢当我们将手指从图形中取出时调用onChartGestureEnd,即使在滚动完成后也会调用onChartTranslate。我被困在那上面了。我想在scroll事件结束后获取可见的ViewPortHandler值。任何想法都会很有帮助的谢谢。这条线绘制在点图下方,而不是上方。最大的问题是我不知道如何在垂直线上滚动点。你有什么建议吗?如果你需要在数据下面画一条线,你可以在XAxisRender类的renderGridLines(Canvas c)方法中画。只需将上面的代码添加到方法的末尾。。无法回答问题的另一部分(关于听众)。如果我找到了答案,我会写信给你。我将此方法与
onChartTranslate
事件相结合,它成功了。但当我试图滚动到第一个和最后一个条目时,它是错误的。这些条目无法移动到中心线,但getEntryByTouchPoint仍然返回them@R4j在这种情况下,我能想到的唯一选择是在第一个真实数据点之前和最后一个真实数据点之后添加“假”或空
条目
s或没有条目的xVAL。有关示例,请参阅本文:
let verticalPointEntry = ChartDataEntry(x: xValue, y: yValue)

let dataSet = LineChartDataSet(values: [verticalPointEntry], label: "")
dataSet.drawCirclesEnabled = false
dataSet.drawValuesEnabled = false
dataSet.setDrawHighlightIndicators(true)
dataSet.drawHorizontalHighlightIndicatorEnabled = false
dataSet.highlightColor = UIColor.white
dataSet.highlightLineWidth = 1   

let highlightPoint = Highlight(x: xValue, y: yValue, dataSetIndex: datasetIndex)
self.highlightValues([highlightPoint])

// "yourNormalDataSet" is your regular dataSet in which you want to display vertical line over it
let chartData = LineChartData(dataSets: [yourNormalDataSet, dataSet])
self.data = chartData
self.data?.notifiyDataChanged()
self.notifyDataSetChanged