2010-10-26 9 views
5

Próbuję opracować aplikację na Androida (wersja docelowa 2.1/2.2), która wymaga śledzenia punktów współrzędnych ścieżki x, y oraz trudnego czasu. Podstawy aplikacji są podobne do FingerPaint, z tym wyjątkiem, że oddzielna nić rysuje niektóre linie za pomocą ścieżki narysowanej na płótnie, a następnie użytkownik próbuje narysować te linie, pokrywając je całkowicie innym obiektem Farba i ścieżka. Użytkownik będzie miał większy pędzel niż komputer. Pierwsze linie rysowane automatycznie używają osobnego wątku podobnego do przykładowej aplikacji LunarLander. Ponieważ linie nie są tylko liniami prostymi, staram się znaleźć sposób, aby wykonać następujące czynności: 1. Śledź losowanie punktów automatycznych. Zdaję sobie sprawę, że dostarczam podstawowe punkty, ale używając path.lineTo i path.arcTo i path.quadTo, aby naprawdę rozgryźć wszystkie punkty.Śledzenie systemu Android współrzędne X, y rysowanie ze ścieżki

  1. Gdy już poznam wszystkie punkty, które wytycza automatyczna ścieżka, monitoruj i wykryj, kiedy użytkownik narysował wszystkie te punkty i "wygrał" tę rundę.

Moja idealna metoda, która oczywiście nie istnieje, byłaby podobna do autoPath.getDrawnPoints().coveredBy(userPath.getDrawnPoints()) == true? Każda pomoc w tej sprawie byłaby bardzo ceniona, dziękuję. -Ben

+0

(. Jest to dość rodzajowe tak nie szorstki mnie zbyt wiele tutaj) Wszelkie choć do przechowywania wszystkich współrzędnych na tablicę dla pierwszego i drugiego (użytkownik) linia narysowana i , dla drugiej (Użytkownika) jednej preformy zgrubne porównanie pierwsze z pewnym miejscem na błąd. – Terrance

Odpowiedz

2

Wszystko, co mogę powiedzieć, to: Ścieżka opiera się na GeneralPath Java, która polega na Path2dFloat.

Jeśli patrzę na kod źródłowy, ma on pakietRozwolony transient float floatCoords[]; Tak więc jedynym sposobem, w jaki widzę, aby uzyskać współrzędne, które przekazuje się z powrotem jest bardziej hack niż rozwiązanie. W każdym razie, to jest tutaj:

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(); 
    } 
} 
Powiązane problemy