我如何使用onTouchEvent或任何其他方式在graphView上绘制形状?

问题描述 投票:0回答:1

[我正在制作一个具有graphView的应用程序,其中笛卡尔的X轴在-150到150之间变化,而Y轴的值在0-150之间变化,如下所示。现在,我想使用我希望我可以在该图上绘制任何形状,绘制形状的坐标应与X和Y轴值一致,而不是与像素屏幕坐标(我们使用MotionEvent()获得)一致。

My app screen

我已经尝试使用onTouchEvent()实现此目的,但是MotionEvent()向我返回了屏幕的像素坐标,它们都是正数。我使用的第二种方法是使用for循环填充graphView的所有可能的数据点,如下面的代码所示。我使用了setOnDataPointTapListener,当我在graphView上切换时我得到了DataPoints。但是这里的问题是当我动手指时在屏幕上绘制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());
            }
        }
    });
}
android-studio touch-event android-graphview motionevent
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.