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

阿西夫·阿里·汗

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

我的应用程序屏幕

我曾尝试使用 onTouchEvent() 来实现这一点,但 MotionEvent() 向我返回屏幕的像素坐标,这些坐标都是正的。我使用的第二种方法是使用 for 循环填充 graphView 的所有可能的数据点,如下面的代码所示。我使用了 setOnDataPointTapListener,当我在 graphView 上使用 Tab 键时,我在其中触摸了数据点。但这里的问题是当我移动手指时在屏幕上绘制 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());
            }
        }
    });
}
哈立德妈妈

您是否尝试过使用笛卡尔绘图仪。

https://github.com/ederdoski/SimpleCartesianPlotter?utm_source=android-arsenal.com&utm_medium=referral&utm_campaign=7223

您还可以在 onTouch() 方法中添加线程。下面的代码对我有用:

@Override
public boolean onTouchEvent(final MotionEvent event) {

   Thread CoordinatesThread = new Thread(new Runnable() {
       @Override
        public void run() {

            float x = event.getX();
            float y = event.getX();

            Log.e("coordinates", x + ":" + y);

            try {// take a gap for 5000 milisec before displaying new coordinates
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                 e.printStackTrace();
            }
         }
    });
    CoordinatesThread.start();

    return true;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java映射集设置为另一个集(使用模型映射器或任何其他方式)

如何使用queryString或任何其他方法解析url参数

我应该使用ReactDOMServer.renderToString()或任何其他方式将React组件呈现为字符串吗?

如何正确使用OnTouchEvent?

如何使用$ request或任何其他方法从资源路由获取参数?

使用POSTMAN或任何其他方式的批量POST / PUT API请求

需要使用str_replace或任何其他方式翻译字符串中的单词

如何使用Pivot或以任何其他方式将表列分为不同的列

如何使用hasmethod(或任何其他方式)来查找hasmethod(fn,Tuple {Type1,Type2,**任何类型**})

用户可以使用javascript或任何其他方式来操纵只读字段中的值吗?

使用蓝牙/ Wi-Fi Direct / BLE API或任何其他方式将ios设备与android设备进行通信

如何在v2.0 facebook API中获得朋友生日-任何其他方式

如何使用带串联或任何其他方式的字符串中的for循环很棒?

使用VBA或任何其他方式将列名称添加到EXCEL中的多个工作表中

如何使用递归或任何其他方法实现LCM(1到N),N> 2?

如何使用freelan(或任何其他免费替代方案)在HTTP上设置VPN?

除了使用密钥以外,如何通过其他方式在状态服务上查找数据

如何使用UIBezierPath或任何其他方法在Objective-C中以编程方式创建如下所示的自定义矩形?

在循环中运行多个函数的标准机器学习(使用递归或任何其他方式)

使用 Linq 或 .Net 中的任何其他方式基于条件从 XML 获取记录

可以使用 CLI 对 docker mongo 实例进行身份验证,但不能通过任何其他方式

Kotlin - 如何使用 GraphView 以图形方式绘制数学函数?

如何强制用户输入小写或任何其他方式使用户输入不区分大小写

使用 LINQ 或任何其他方式将 foreach 转换为优化代码

我们可以在 javascript 中使用 fetch 从谷歌表格或任何其他方式获取数据吗?

使用 BeanShell 和 JSON 提取器或任何其他方式从 JSON 响应中检索和执行对数组值的排序?

如何使用 execvp 或任何其他 exec 僅在一個文件上運行?

是否可以使用 web3 或任何其他方式获取元掩码帐户名称?

如何将多个引用用于带有钩子或任何其他方式的嵌套元素数组