了解android.graphics.path并比较android.graphics.path值

时间:2012-02-28 12:38:15

标签: android

我正在使用Android中的应用程序,其中我必须获取android.graphics。path值并进行比较。

考虑以下图片:

enter image description here

第一张图像显示一条直线和生成的Path值。同样,第二个图像也显示了一条相似的直线,具有不同的Path值。

我无法理解生成的值。任何人都可以解释生成的值究竟是什么意思?我可以大致从屏幕坐标中猜测一个路径值吗?

另外,在我的应用程序中,我想比较路径值。上图中显示的线条相似。在我的应用程序中,我想比较它们并将它们呈现为相同的行。而且我不仅仅是要比较线条,还有曲线和所有这些可绘制的形状。为了比较,我首先必须规范化我的路径值(可能为我当前的画布调用getMatrix吗?),以便对不同的屏幕尺寸产生相同的效果?

另一种比较方式会更加简单,找到数字路径的质心。显然,与曲线相比,线条在不同的位置会有一个质心。但这种比较不会那么准确。我想存储一些值,然后将生成的路径值与存储值进行比较,同时比较质心,以便获得更好的准确性。但为此,我需要了解生成的路径值!

请帮忙或指导!谢谢! : - )

修改

我用于将路径值转换为String的代码。我的路径值存储在ArrayList(称为pointsToDraw)中。这是代码:

@Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                        synchronized(pointsToDraw){
                        for(Path path : pointsToDraw)
                        {
                            stringPoints.add(String.valueOf(path));
                        }
                        }
                        TextView b1Text = (TextView) findViewById(R.id.GText);
                        for(String s : stringPoints)
                        {
                            b1Text.setText(s);
                        }

            }

2 个答案:

答案 0 :(得分:6)

Path对象是封装一系列几何路径的对象。如果你想以编程方式将一条路径与另一条路径进行比较,那么我认为你必须开始的地方就是在PathMeasure对象上使用Path来拉出所有的坐标。使用PathMeasure,您可以通过提供距离参数来获得路径所遵循的一系列坐标。

PathMeasure

然后,为了确定一个给定路径在屏幕上的大小及其路径方面是否相似,我建议在它们上面使用PathMeasure和比较它们产生的坐标给定增量距离参数。然后使用一些比较算法,其可以简单地确定每组比较坐标是否在彼此的距离内(考虑相对的起始坐标)。

所以我无法帮助你使用的算法,但作为一个起点,我认为你必须使用PathMeasure来检查和分析Path中的数据首先。或者,您可能希望将它们渲染到bitmap并使用某种图像识别库来比较这些位图,或许?

答案 1 :(得分:1)

我认为你不能为该对象创建一个字符串,所以你得到了默认值:如果你看到the manual,你会发现它实际上与

相同
getClass().getName() + '@' + Integer.toHexString(hashCode())

或者,用他们的话来说,

  

对象的哈希码的无符号十六进制表示。

它只是对象的散列值,并且没有直接可识别的连接,例如Path的任何功能(位置等)。如果你真的想知道它是如何制作的,你可以找到该对象的hashCode()函数,但我怀疑你不会看到任何有趣的问题。

要明确的是,当您说要比较“路径值”时,您似乎暗示您要比较上述打印值。我不明白你想要怎么做。您可能想要检查2个单独绘制/创建的行是否相同。您不能将此哈希用于此目的,您需要使用实际值,如start / stop / angle /或类似的东西。 (我不确定路径中有哪些成员,但你可以查看一下)