Android 跟踪 x,y 坐标从 Path 中绘制

标签 android android-canvas

我正在尝试开发一个 android 应用程序(针对版本 2.1/2.2),它需要跟踪路径 x、y 坐标点并且遇到困难。该应用程序的基础与 FingerPaint 类似,不同之处在于首先一个单独的线程使用可绘制路径在 Canvas 上绘制一些线条,然后用户尝试在这些线条上绘制,用不同的 Paint 和 Path 对象完全覆盖它们。用户将拥有比计算机更大的画笔。第一个自动绘制的线条使用类似于 LunarLander 示例应用程序的单独线程。由于线条不仅仅是直线,我正在努力寻找一种方法来执行以下操作: 1.跟踪自动点绘制。我意识到我提供的是基本要点,但使用 path.lineTopath.arcTopath.quadTo 来真正找出所有要点.

  1. 一旦我知道自动路径绘制的所有点,便会监控和检测用户何时绘制了所有这些点并“赢得”该轮。

我的理想方法显然不存在,就像 autoPath.getDrawnPoints().coveredBy(userPath.getDrawnPoints()) == true ? 对此的任何帮助将不胜感激,谢谢。 -本

最佳答案

我只能说:路径依赖GeneralPath依赖于Java的 Path2dFloat .

如果我查看源代码,它有一个 packageReadable transient float floatCoords[]; 因此,我看到获得您传回的坐标的唯一方法更多的是破解而不是解决方案。无论如何,它在这里:

public float[] getPointsFromPath(GeneralPath path){
    Class<?> clazz = path.getClass();
    while(true){
        clazz = clazz .getSuperclass();
        if (clazz ==  Path2D.Float.class){
            break;
        }
    }
    try {
        Field f = clazz.getDeclaredField("floatCoords");
        if (f != null){
            if (!f.isAccessible()){
                f.setAccessible(true);
            }
            Object o = f.get(path);
            if (o != null && o instanceof float[]){
                float[] drawnPoints = (float[])o;
                Log.d("TAG", drawnPoints);
                return drawnPoints;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } 
}

关于Android 跟踪 x,y 坐标从 Path 中绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4020091/

相关文章:

android - IDEA报告Android Gradle Build Target错误

java - 当 boolean 值明显为 true 时,Boolean 返回 false

android - 在 Canvas 上绘图时,路径弧比线弧粗

android - Jetpack compose Canvas 混合模式未按预期工作

android - 如何在 Android 的 Region 中找到给定 X 的最大可能 Y 点?

java - 使用不同的按钮清除不同的编辑文本,同时重用相同的代码

android - IOException : read failed, 套接字可能已关闭 - Android 4.3 上的蓝牙

android - 缩放安卓键盘

java - 在 Canvas 的左上角绘制文本

android - 如何在 Android 上使用 Spatialite 和 Xamarin