2010-09-29 6 views
12

Ich habe eine Ansicht, die rund ist und schwebt über (-> in z-Achsenrichtung aus dem Bildschirm) den Hauptinhalt. Wenn der Benutzer auf den Bildschirm tippt, möchte ich entweder den Hauptinhalt auswählen oder die Ansicht darüber, wenn sie die Hauptansicht abdeckt.Android: Kann ich eine Ansicht/Leinwand erstellen, die nicht rechteckig ist, sondern z. runden?

Bis jetzt funktioniert das perfekt. Ich habe einen runden Gegenstand auf einer transparenten Leinwand. Das bedeutet, dass Sie alles über den Hintergrund sehen können, der außerhalb dieses Kreises liegt. Sie können es jedoch nicht auswählen, da es sich immer noch um den schwebenden Canvas handelt, nur mit einer transparenten Farbe.

Jetzt frage ich mich, um dieses Problem zu lösen, wenn es möglich ist, die Ansicht/Leinwand selbst rund zu gestalten?


aktualisieren

Ich habe ein Bild für eine bessere Erklärung, was ich zu erreichen versuchen. alt text

+0

können Sie die Kollisionserkennung selbst durchführen, erhalten Sie ein XY auf Ihrem Touch-Ereignis und wenn es außerhalb des Radius nicht die Eingabe behandelt? – schwiz

+0

Nun, das habe ich schon. Ich möchte jedoch, dass das Berührungsereignis von der Hauptschicht im Hintergrund gehandhabt wird, z. das Textfeld – znq

+0

Wenn Sie beim Touch-Ereignis "false" zurückgeben, sollte das Even mit dem nächsten in der Zeile übereinstimmen. Manchmal ist das sehr schwierig, abhängig von der Layout-Hierarchie, aber Sie sind auf dem richtigen Weg. Wenn Sie Ihre Layout-XML-Dateien und OnTouch-Listener veröffentlichen, können wir möglicherweise etwas herausfinden. – schwiz

Antwort

4

Soweit ich weiß - es ist unmöglich. Ich habe die Quellen von View.java bei git.kernel.org überprüft und es basiert auf Rect-Klasse - rectys definieren Position, Größe, zu ungültig zu machende Bereiche usw. ("Die Geometrie einer Ansicht ist die eines Rechtecks." - aus den Kommentaren in View.java)

Wie Canvas-Klasse - es ist in der Regel über Bitmap oder GL erstellt. Bitmap ist definitiv eine rectange (eine Matrix), also scheint Canvas auch ein rectange darzustellen. Wenn GL verwendet wird, wird ein Ansichtsfenster angegeben (ebenfalls ein Rechteck).

Es scheint die naheliegendste Methode zu sein, zu überprüfen, ob die an Ihre onTouch() -Methode übergebenen Koordinaten in Ihre Region passen und false zurückgibt, wenn dies nicht der Fall ist. Dann wird das Ereignis an die Ansicht unten weitergeleitet und es sollte das Ereignis verarbeiten.

+1

Danke zserge für die ausführliche Antwort. Der letzte erwähnte Punkt ist genau das, was ich gerade mache, aber ich habe einige andere Probleme damit, die ich hier beschrieben habe: http://stackoverflow.com/questions/3832893/android-delegate-touch-event-to- Unterlegen-Ansicht – znq

-3

Sie müssen Android Selector angeben, um das Standard-Schwebebild zu vermeiden.

+0

Vielleicht habe ich mich nicht richtig erklärt, aber ich habe ein Bild zur Klärung hinzugefügt. Ich denke nicht, dass Selector die Lösung dafür ist, aber wenn ich falsch liege, lass es mich wissen. – znq

+0

Können Sie erklären, was ist dieser Kreis? Es ist ein Bild, das immer angezeigt werden sollte. es sollte einen Selektor haben? Ich kann mit dem dpad zugreifen? – Macarse

+0

Der Kreis ist eine Art "Pop-Up", das über der Haupt-Ebene schwebt. Es befindet sich auf der Z-Achse außerhalb des Bildschirms über der Hauptinhaltsansicht. Sie können es wie einen AlertDialog sehen, aber rund statt rechteckig und die Möglichkeit, Elemente aus dem Hintergrund auszuwählen. – znq

1

Wahrscheinlich nicht mehr relevant für den ursprünglichen Fragesteller, aber für jeden, der immer noch sucht, sieht es so aus, dass es in L: https://developer.android.com/preview/material/views-shadows.html#clip hinzugefügt wird. Mit der Methode View.setClipToOutline können Sie eine Ansicht an die Form eines rechteckigen, runden oder runden rechteckigen Zeichenbereichs anhängen.

Verwandte Themen