安卓跟踪路径中的x,y坐标绘制

5
我正在尝试开发一个Android应用程序(针对版本2.1/2.2),它需要跟踪路径的x,y坐标点,但我遇到了困难。该应用程序的基本原理类似于FingerPaint,只是首先使用一个单独的线程在画布上绘制一些线条,使用Path drawable对象,然后用户尝试用不同的Paint和Path对象完全覆盖这些线条进行绘制。用户将拥有比计算机更大的画笔。第一条自动绘制的线路使用类似LunarLander示例应用程序的单独线程。由于这些线不仅仅是直线,因此我很难找到以下方法: 1. 跟踪自动绘制的点。 我意识到我提供了基本点,但是使用path.lineTopath.arcTopath.quadTo来真正确定所有点。
  • 一旦我知道自动路径绘制的所有点,监测并检测用户何时绘制过所有这些点,并“获胜”该轮。

  • 我的理想方法显然不存在,像下面这样: autoPath.getDrawnPoints().coveredBy(userPath.getDrawnPoints()) == true? 任何关于此方面的帮助将不胜感激,谢谢。 -Ben

    考虑将第一条和第二条(用户)绘制线段的所有坐标存储到数组中,然后对第二条(用户)线段与第一条线段进行粗略比较,留有一定误差空间。 - Terrance
    1个回答

    2
    我能说的是:Path 依赖于 Java 的 GeneralPath,而 GeneralPath 又依赖于 Path2dFloat
    如果我查看源代码,它有一个 packageReadable 的 transient float floatCoords[];。所以我认为获取传递的坐标的唯一方法更像是一个 hack 而不是解决方案。无论如何,这里是它:
    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();
        } 
    }
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接