MPAndroidChart设置中心垂直线

时间:2015-11-19 12:45:46

标签: android charts mpandroidchart

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

enter image description here

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

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

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

得到结果:

enter image description here

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

更新

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

3 个答案:

答案 0 :(得分:6)

您是否尝试在图表上使用getEntryByTouchPoint,提供图表中心的x和y坐标?

  

public Entry getEntryByTouchPoint(float x, float y)

     

返回图表触摸位置显示的Entry对象

答案 1 :(得分:5)

看一下方法

protected void drawGridBackground(Canvas c) {
BarLineChartBase类中的

(LineChart的父级)。在该方法中,您可以使用所有数据在中间绘制线条。 像这样的东西

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);

答案 2 :(得分:1)

也许为时已晚,但这是我的回答。它是使用 Charts (iOS的 MPAndroidCharts 端口)在Swift中编码的,但API的99%相同;)

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

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

希望它有所帮助!