Ответ 1
Пробовали ли вы использовать getEntryByTouchPoint
на диаграмме, снабжающей координаты x и y центра диаграммы?
public Entry getEntryByTouchPoint(float x, float y)
возвращает объект
Entry
, отображаемый в касании позиции диаграммы
Я хочу установить вертикальную линию в центре 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 точками и как рассчитать, сколько точек находится в текущем порт представления. Кто-нибудь знает это?
Пробовали ли вы использовать getEntryByTouchPoint
на диаграмме, снабжающей координаты x и y центра диаграммы?
public Entry getEntryByTouchPoint(float x, float y)
возвращает объект
Entry
, отображаемый в касании позиции диаграммы
Взгляните на метод
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);
Может быть, это слишком поздно, но вот мой ответ. Он закодирован в 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.
Надеюсь, что это поможет!