我正在使用Android中的应用程序,其中我必须获取android.graphics。path值并进行比较。
考虑以下图片:
和
第一张图像显示一条直线和生成的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);
}
}
答案 0 :(得分:6)
Path
对象是封装一系列几何路径的对象。如果你想以编程方式将一条路径与另一条路径进行比较,那么我认为你必须开始的地方就是在PathMeasure
对象上使用Path
来拉出所有的坐标。使用PathMeasure
,您可以通过提供距离参数来获得路径所遵循的一系列坐标。
然后,为了确定一个给定路径在屏幕上的大小及其路径方面是否与相似,我建议在它们上面使用PathMeasure
和比较它们产生的坐标给定增量距离参数。然后使用一些比较算法,其可以简单地确定每组比较坐标是否在彼此的距离内(考虑相对的起始坐标)。
所以我无法帮助你使用的算法,但作为一个起点,我认为你必须使用PathMeasure
来检查和分析Path
中的数据首先。或者,您可能希望将它们渲染到bitmap
并使用某种图像识别库来比较这些位图,或许?
答案 1 :(得分:1)
我认为你不能为该对象创建一个字符串,所以你得到了默认值:如果你看到the manual,你会发现它实际上与
相同getClass().getName() + '@' + Integer.toHexString(hashCode())
或者,用他们的话来说,
对象的哈希码的无符号十六进制表示。
它只是对象的散列值,并且没有直接可识别的连接,例如Path的任何功能(位置等)。如果你真的想知道它是如何制作的,你可以找到该对象的hashCode()
函数,但我怀疑你不会看到任何有趣的问题。
要明确的是,当您说要比较“路径值”时,您似乎暗示您要比较上述打印值。我不明白你想要怎么做。您可能想要检查2个单独绘制/创建的行是否相同。您不能将此哈希用于此目的,您需要使用实际值,如start / stop / angle /或类似的东西。 (我不确定路径中有哪些成员,但你可以查看一下)