Pytanie Android: czy mogę utworzyć widok / płótno, które nie jest prostokątne, ale np. okrągły?


Mam widok, który jest okrągły i unosi się nad (-> w kierunku osi Z wychodzi z ekranu) główną treścią. Gdy ktoś dotknie ekranu, chcę wybrać główną treść do wybrania lub widok zawisający powyżej, gdy obejmuje widok główny.

Na razie działa to doskonale. Mam okrągły przedmiot na przezroczystym płótnie. Oznacza to, że możesz zobaczyć wszystko, co znajduje się poza tym okręgiem. Jednak nie można go wybrać, ponieważ nadal jest zawieszonym obszarem roboczym, tylko za pomocą przezroczystej farby.

Zastanawiam się teraz, czy rozwiązać ten problem, czy możliwe jest ukształtowanie widoku / płótna w okrągły kształt?


Aktualizacja

Dodałem obraz dla lepszego wyjaśnienia, co staram się osiągnąć. alt text


12
2017-09-29 13:46


pochodzenie


czy potrafisz samodzielnie wykryć wykrywanie kolizji, uzyskać XY na zdarzeniu dotykowym i czy jego zasięg poza promieniem nie obsługuje wejścia? - schwiz
Cóż, już to mam. Jednak chcę, aby zdarzenie dotykowe było obsługiwane przez główną warstwę w tle, np. pole tekstowe. - znq
Jeśli zwrócisz fałsz w wydarzeniu dotyku, powinno ono przejść dalej do kolejnej rzeczy w kolejce. Czasami jest to bardzo trudne do osiągnięcia poprawnie w zależności od hierarchii układu, ale jesteś na dobrej drodze. Jeśli opublikujesz pliki układu XML i słuchaczy onTouch, być może uda nam się coś wymyślić. - schwiz
@schwiz: Stworzyłem dla tego osobne pytanie: stackoverflow.com/questions/3832893/...  (Powodem, dla którego stworzyłem osobne pytanie, jest to, że z tym pytaniem chciałbym się dowiedzieć, czy mogę mieć płótno, które jest okrągłe) Mam zwrot fałszywy, a także rejestrowanie dotykowych słuchaczy, ale nie robi tego ". t nawet przejść do następnego elementu w hierarchii (PopupWindow). - znq


Odpowiedzi:


O ile wiem - jest to niemożliwe. Sprawdziłem źródła View.java na git.kernel.org i opiera się na klasie Rect - rects definiują pozycję, rozmiar, regiony do unieważnienia itd. ("Geometria widoku jest prostokąta." - z komentarzy w View.java)

Jeśli chodzi o klasę Canvas - zwykle jest ona tworzona na bitmapach lub GL. Bitmap jest zdecydowanie prostokątem (macierzą), więc płótno również przedstawia prostokąt. Jeśli używasz GL, to podświetlany jest widok (również prostokąt).

Wydaje się, że jest to najbardziej oczywisty sposób sprawdzenia, czy współrzędne przekazane do metody onTouch () pasują do regionu i zwracają fałsz, jeśli nie. Następnie zdarzenie zostanie przekazane do widoku poniżej i powinno ono przetworzyć zdarzenie.


4
2017-10-02 09:22



Dziękujemy zserge za szczegółową odpowiedź. Ostatni wspomniany punkt to dokładnie to, co teraz robię, ale mam z tym kilka innych problemów, które opisałem tutaj: stackoverflow.com/questions/3832893/... - znq


Prawdopodobnie nie dotyczy już oryginalnego pytającego, ale dla każdego, kto wciąż wygląda, wygląda na to, że zostanie on dodany w L: https://developer.android.com/preview/material/views-shadows.html#clip. The View.setClipToOutline Metoda umożliwia przycięcie widoku do kształtu prostokąta, okrągłego lub okrągłego prostokątnego ciągnięcia.


1
2017-08-15 22:02





Musisz określić Selektor Androida aby uniknąć domyślnego obrazu unoszącego się.


-3
2017-09-29 16:10



Może nie wyjaśniłem się poprawnie, ale dodałem obrazek, żeby wyjaśnić. Nie sądzę, że Selector jest rozwiązaniem tego problemu, ale jeśli się mylę, proszę dać mi znać. - znq
Czy możesz wyjaśnić, co to za okrąg? to obraz, który powinien być pokazywany zawsze? powinien mieć selektor? Czy mogę uzyskać do niego dostęp za pomocą notatnika? - Macarse
Krąg to rodzaj "pop-up" unoszącego się nad główną warstwą. Jest na osi Z wychodzącej z ekranu powyżej głównego widoku treści. Możesz zobaczyć to jak AlertDialog, ale okrągłe zamiast prostokątne i możliwość wybierania elementów z tła. - znq
@Stefan Klumpp: Powinien działać z selektorem, czy możesz wkleić kod w celu odtworzenia problemu? - Macarse
@Macarse: Może masz rację. Czy to możliwe, że link w twojej odpowiedzi jest błędny i zamiast tego próbowałeś wskazać mi to? developer.android.com/reference/java/nio/channels/Selector.html  Właśnie dlatego byłem zdezorientowany i myślałem, że to, co miałeś na myśli z Selektorem, nie jest poprawne. - znq