【问题标题】:Android tracking x,y coordinates draw from PathAndroid 跟踪从 Path 绘制的 x,y 坐标
【发布时间】:2013-03-07 21:36:28
【问题描述】:

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

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

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

【问题讨论】:

  • (这是非常通用的,所以不要在这里太粗暴。)尽管将所有坐标存储到一个数组中,用于绘制的第一条和第二条(用户)线,以及第二条(用户)一个人对第一个进行粗略的比较,有一些错误的余地。

标签: android android-canvas


【解决方案1】:

我只能说: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();
    } 
}

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 2022-01-23
    • 2023-03-22
    • 1970-01-01
    • 2012-02-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多