2012-02-28 54 views
2

我正在研究Android中的應用程序,其中我必須獲取android.graphics。 path值並進行比較。瞭解android.graphics.path並比較android.graphics.path值

考慮以下的圖像:

enter image description here

第一個圖像顯示的直線和將所生成的路徑值。同樣,第二幅圖像也顯示了一條類似的直線,並具有不同的路徑值。

我無法理解所生成的值。任何人都可以解釋生成的值究竟是什麼意思?我可以大概從屏幕座標中大膽猜測路徑值嗎?

另外,在我的應用程序中,我想比較路徑值。上圖中顯示的行類似。在我的應用程序中,我想比較它們並將它們渲染爲相同的行。我不只是比較線條,還會有曲線和所有這些可繪製的形狀。爲了進行比較,我首先必須正常化我的路徑值(可能爲我當前的畫布調用getMatrix?),以便對不同的屏幕尺寸具有相同的效果?

還有另一種比較方式,將會更簡單,找到數字路徑的質心。很顯然,與曲線等相比,線條的中心位置不同。但這種比較不會那麼準確。我想存儲一些值,然後將生成的路徑值與存儲的值進行比較,並比較質心,以便獲得更好的準確性。但爲此,我需要了解生成的路徑值!

請幫忙指導!謝謝! :-)

編輯:

,我使用了我的轉換路徑值的字符串中的代碼。我的路徑值存儲在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); 
         } 

      } 
+1

我很努力去理解這個問題的第一部分;具體來說,你是什麼意思的「生成的價值」。什麼是在字符串上顯示的字符串 - 它是path.toString()的結果? – Trevor 2012-03-01 13:29:28

+0

@TrevorPage號我正在使用'String.valueof(path)'。我只是編輯問題並添加我用來生成字符串的代碼。 – 2012-03-01 13:38:11

+0

這不就是你看到路徑的方式,因爲它沒有實際的字符串值或'toString()'函數?它只是說「好吧,這是android.graphics.Path的一個對象,它目前在內存地址blahblahbalh」? – Nanne 2012-03-01 13:44:24

回答

5

A Path object是封裝一系列幾何路徑的對象。如果您想以編程方式將一條路徑與另一條路徑進行比較,那麼我認爲您必須啓動的地方是使用該對象上的PathMeasure來抽出所有座標。使用PathMeasure,您可以通過提供距離參數來獲得路徑所遵循的一系列座標。

PathMeasure

然後,爲了確定一個給定的路徑是否類似到另一個大小和它在屏幕路徑而言,我或許會建議使用他們兩個PathMeasure和比較合作它們產生給定的增量距離參數。然後使用一些比較算法,這可以像確定每組比較座標是否在彼此的距離內(考慮到相對的起始座標)一樣簡單。

所以我不能幫助你使用的算法,但作爲一個起點,我認爲它是PathMeasure,你必須使用它來檢查和分析Path內的數據開始。或者,您可能想將它們渲染到bitmap並使用某種圖像識別庫來比較這些位圖,也許?

+0

我認爲這是我需要使用的!我會與此合作,並回到你的身邊,我成功地實現了我想要的!謝謝! – 2012-03-01 14:04:36

1

你不能真正使該對象我想一個字符串,所以你得到的默認值:如果檢查出the manual你看,它實際上是一樣的

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

,或者在它們的話,

對象的哈希碼的無符號的十六進制表示。

它只是對象的散列值,並且沒有直接可識別的連接,例如路徑的任何特徵(位置等)。如果你真的想知道它是如何製造的,你可以找到該物體的功能,但我懷疑你不會看到這個問題的任何有趣的東西。

要說清楚,當你說你想比較「路徑值」,你似乎暗示你想比較上面的印刷值。我不明白你會如何需要這個。您可能想要檢查2個單獨繪製/創建的線是否相同。你不能使用這個散列來達到這個目的,你需要使用像start/stop/angle /這樣的實際值。 (我不確定路徑中存在哪些成員,但可以查看)

+0

我明白你的觀點。比較線路的方式我錯了。正是你寫的 - 我想檢查2個單獨繪製/創建的線是否相同。但我需要一些關於這方面的指導。我沒有檢查[Path](http://developer.android.com/reference/android/graphics/Path.html)API,我沒有找到對我的目的有用的東西。 – 2012-03-01 13:58:51

相關問題