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

时间:2010-10-26 01:37:35

标签: android android-canvas

我正在尝试开发一个Android应用程序(定位版本2.1 / 2.2),它需要跟踪路径x,y坐标点并且我很难。应用程序的基础知识类似于FingerPaint,除了首先一个单独的线程使用Path drawable绘制一些线条到画布上,然后用户尝试绘制这些线条,用不同的Paint和Path对象完全覆盖它们。用户将使用比计算机更大的Paint画笔。第一个自动绘制的线使用类似于LunarLander示例应用程序的单独线程。由于线条不仅仅是直线,我正在努力寻找一种方法来做到以下几点: 1.跟踪自动点数。我意识到我提供了基本要点,但使用path.lineTopath.arcTo以及path.quadTo来确定所有要点。

  1. 一旦我知道了自动路径所绘制的所有点,就会监控并检测用户何时已经覆盖所有这些点并“赢得”该轮次。
  2. 我理想的方法显然不存在 autoPath.getDrawnPoints().coveredBy(userPath.getDrawnPoints()) == true? 对此有任何帮助将不胜感激,谢谢。 -ben

1 个答案:

答案 0 :(得分:2)

我只能说:Path依赖于依赖的Java GeneralPath 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();
    } 
}