Я создаю приложение, в котором у меня есть graphView, где декартова ось X изменяется от -150 до 150, а значения оси Y варьируются от 0 до 150, как показано ниже. Теперь я хочу нарисовать любые фигуры поверх этого graphView, используя прикосновение моего пальца. Я хочу, чтобы я нарисовал любую фигуру на этом графике. Координаты нарисованной фигуры должны соответствовать значениям оси X и Y, а не координатам пикселей (которые мы получаем с помощью MotionEvent ()). .

Я пытался добиться этого с помощью onTouchEvent (), но там MotionEvent () возвращает мне пиксельные координаты экрана, которые все являются положительными , Второй подход, который я использовал, - это заполнение всех возможных точек данных в графе GraphView, использующих циклы for, как показано в коде ниже. Я использовал setOnDataPointTapListener, где я касаюсь DataPoints, когда я вкладываю курсор над graphView. Но проблема здесь в том, когда я двигаю пальцем над экраном для рисования setOnDataPointTapListener () не срабатывает. Есть ли способ сделать это? Я буду очень благодарен за вашу помощь. Спасибо
public class MainActivity extends AppCompatActivity {
GraphView graph;
ArrayList<Point> dataPoints;
private static final String TAG = "MainActivity";
LineGraphSeries<DataPoint> series;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dataPoints = new ArrayList<>();
graph = findViewById(R.id.graphView);
Viewport viewport = graph.getViewport();
graph.getViewport().setXAxisBoundsManual(true);
graph.getViewport().setYAxisBoundsManual(true);
graph.getViewport().setScrollable(true);
graph.getViewport().setScalable(true);
viewport.setMaxX(150);
viewport.setMinX(-150);
viewport.setMaxY(150);
viewport.setMinY(0);
series = new LineGraphSeries<>();
for (int x = -150; x <= 150; x++) {
for (int y = 0; y <= 150; y++) {
DataPoint dataPoint = new DataPoint(x, y);
//100000 is the max datapoints
series.appendData(dataPoint, false, 100000);
}
}
graph.addSeries(series);
series.setOnDataPointTapListener(new OnDataPointTapListener() {
@Override
public void onTap(Series series, DataPointInterface dataPoint) {
Toast.makeText(MainActivity.this, "Datapoints are " + dataPoint.getX();
+ " " + dataPoint.getY(), Toast.LENGTH_LONG).show();
DataPoint dataPoint1 = (DataPoint) dataPoint;
int x = (int) dataPoint1.getX();
int y = (int) dataPoint1.getY();
dataPoints.add(new Point(x, y));
Log.d(TAG, "onTap: " + dataPoints.size());
}
}
});
}