我想在LineChart
的中心设置一条垂直线,如下所示:
滚动到每个点时,可以通知更改下面的日期(橙色日期字段)。它可以通过单击箭头按钮以编程方式向左或向右移动。
目前,我可以使用以下代码设置视口并允许移动到中心位置:
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)
可能有所帮助。我需要的是2点之间的距离以及如何计算当前视口中有多少点。有谁知道吗?
答案 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 变量定义的点上显示一条曲线。
希望它有所帮助!