2015-11-19 42 views
10

我想设置在LineChart中心这样的垂直线:MPAndroidChart设定的中心垂直线

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

怎样绘制,并设置一条垂直线像以上?

更新

对于听者,我觉得OnChartGestureListeneronChartTranslate(MotionEvent me, float dX, float dY)可能会有帮助。我需要的是2点之间的距离以及如何计算当前视口中的点数。有人知道吗?

+0

您可以使用“FrameLayout”添加一行,如第一张图片。 – activesince93

+0

@activesince93如何使它成为中心,以及我如何知道每个节点何时以这种方式滚动到此行? – R4j

回答

6

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

public Entry getEntryByTouchPoint(float x, float y)

返回在图表

+0

我将这个方法与'onChartTranslate'事件结合起来,它工作。但是当我尝试滚动到第一个和最后一个条目时,这是错误的。这些条目不能移动到中心线,但getEntryByTouchPoint仍然返回它们 – R4j

+0

@ R4j我唯一能想到的情况是在第一个实数之前添加“虚假”或空的“Entry”或xVals而没有条目数据点和最后一个。看到这个帖子的例子:http://stackoverflow.com/questions/33619679/make-line-chart-with-values-and-dates/33619941#33619941 –

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

谢谢。这条线画在点图之下,而不是上面。而最大的问题是我不知道如何在这条垂直线上滚动点时倾听。你有什么建议吗? – R4j

+0

如果您需要在数据下面画一条线,可以在XAxisRender类的方法renderGridLines(Canvas c)中执行。只需将上面的代码添加到方法的末尾即可..无法回答你的问题的其他部分(关于听众)。如果我找到答案 - 我会写信给你。 – Lanitka

1

的触摸位置显示的Entry对象也许为时已晚,但这里是我的答案。它编码在夫特使用图表MPAndroidCharts端口为iOS),但是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 

这将显示在由您x值变量定义的点vercital线。

希望它有帮助!