2013-08-21 9 views
10

Moim pomysłem jest posiadanie dwóch SurfaceViews. Jeden surfaceView, który pomieści obraz (np. ImageSurgaceView) i drugą powierzchnię leżącą na wierzchu pierwszej, która zawiera adnotacje (np. AnnotationSurfaceView), takie jak koło, prostokąt itd. Teraz muszę odwzorować te widoki powierzchni, tak aby wysokość, szerokość są takie same, a ponadto zarówno widok powierzchni powinien poruszać się po przeciągnięciu, czyli dzielić zdarzenia dotykowe. Mówiąc dokładniej, kiedy przesuwałbym obraz w górę, adnotacje powinny również poruszać się w górę.Android: Czy można mieć dwa widoki powierzchni jeden na drugim?

Teraz nie jestem pewien, czy jest to możliwe w systemie Android. Czy ktoś może powiedzieć lub udostępnić niektóre informacje na ten temat. Nie mam do tego żadnego pomysłu na wdrożenie i dlatego nie mam żadnego konkretnego kodu. Co więcej, nie mogłem znaleźć czegoś podobnego.

Dzięki za pomoc.

Odpowiedz

20

Tak, jest to możliwe. Możesz dodać oba SurfaceView s jako dzieci z FrameLayout. Będziesz również chciał zadzwonić pod numer setZOrderMediaOverlay na jeden lub oba numery SufaceView, aby określić sposób ich warstwowania.

Co więcej, może to być intensywny algorytm graficzny, który opisujesz. Należy rozważyć dodanie atrybutu AndroidManifest.xml .

Wreszcie, po prostu skonfiguruj niestandardowy OnTouchListener do obsługi zdarzeń przeciągania. Użyj MotionEvent.getRawX() i MotionEvent.getRawY(), aby uzyskać punkt dotykowy i użyj go do manipulowania płótnami.

+0

Nie mogę dodać obu widoków powierzchni do framelayout. Mówi, że muszę wywołać ** removeView() ** przed dodaniem kolejnego dziecka. Ponadto podczas ustawiania ** android: HardwareEnabled = "true" **, otrzymuję kolejny błąd, który mówi ** błąd: Nie znaleziono identyfikatora zasobu dla atrybutu "HardwareEnabled" w pakiecie "android" **. – Shobhit

+0

@Shobhit, atrybutem był literówka, którą naprawiłem. Wypróbuj 'android: hardwareAccelerated =" true "'. Jeśli chodzi o twój pierwszy problem - brzmi to tak, jakbyś używał 'ScrollView' zamiast tego. Czy możesz dodać swój układ ("XML" lub programowy) do pytania? – Phil

+0

Hej Phil, był mały błąd i teraz udało mi się sprawić, że działa, ale tylko częściowo. Muszę nadal implementować niestandardowy OnTouchListener. Czy przypadkiem masz jakiś link do kodu przykładowego? Jeśli tak, czy mógłbyś się podzielić? Wezwę aktualny kod jako moją odpowiedź. Dzięki! :) – Shobhit

Powiązane problemy