MPAndroidChart установить вертикальную линию центра

Я хочу установить вертикальную линию в центре 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 точками и как рассчитать, сколько точек находится в текущем порт представления. Кто-нибудь знает это?

Ответ 1

Пробовали ли вы использовать getEntryByTouchPoint на диаграмме, снабжающей координаты x и y центра диаграммы?

public Entry getEntryByTouchPoint(float x, float y)

возвращает объект Entry, отображаемый в касании позиции диаграммы

Ответ 2

Взгляните на метод

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

Ответ 3

Может быть, это слишком поздно, но вот мой ответ. Он закодирован в Swift с использованием графиков (порт 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

Это отобразит строку vercital над точкой, определенной вашей переменной xValue.

Надеюсь, что это поможет!