2010-12-08 5 views
0

Für ein neues Android-Projekt brauche ich Buttons, die beim Fokussieren oder Drücken "leuchten", dh ein größeres Bild sollte über dem ersten Bild erscheinen. Mein Problem hier ist: Der anklickbare Bereich sollte nicht so groß wie dieses Overlay-Bild sein.Android: Erstellen Sie eine Bildschaltfläche mit einem nicht anklickbaren OverLarge-Overlay, wenn Sie fokussiert sind?

In ASCII-Art:

+------------------------------------------+ 
|           | 
|           | 
|   +---------------------+   | 
|   | Inner image, always |   | 
|   | visible & clickable |   | 
|   +---------------------+   | 
| Overlay (image with alpha on top)  | 
| visible on focus or press, NOT clickable | 
+------------------------------------------+ 

Also im Grunde kann es auch andere Elemente sein, unter dem Overlay-Bild, das noch vollständig zugänglich sein sollte, beispielsweise indem Sie auf & ziehen klicken.

Wissen Sie, wie ich das in Android lösen kann? Eine XML-Layout-Lösung wäre die beste! Irgendwelche Best Practices hier?

Antwort

1

Wissen Sie, wie ich das in Android lösen kann?

Dinge, die von einem Z-Achsen-Standpunkt aus oben liegen, erhalten die Eingabeereignisse. Daher erscheint Ihre Wahl zu sein:

  1. Eine sofortige Unterklasse von View, wo man alles selbst tun, mit den ImageButton Abgabe (oder was auch immer es ist, Sie sind jetzt).

  2. Es wurde versucht, eine zusammengesetzte benutzerdefinierte View zu erstellen und relevante Eingabeereignisse an die darunter liegenden Widgets zu delegieren, was möglicherweise nicht möglich ist.

  3. Finden Sie einen Weg, ein akzeptables Aussehen zu erreichen, das nicht bedeutet, dass Sie etwas über den Knopf haben.

Ich gehe davon aus, dass durch „Knopf“ Sie bedeuten eine ImageButton, wo Sie den Hintergrund ersetzt haben Ihre eigene StateListDrawable zu sein - sonst nichts, was man hier macht mir viel Sinn schrieb.

Wenn ja, brauchen Sie kein Overlay. Du kannst mit einer ... ummmmm ... Unterlage auskommen. Machen Sie die Unterlage (eine separate ImageView) basierend auf dem Status der Schaltfläche sichtbar oder unsichtbar. Lassen Sie das Gesicht und den Hintergrund der ImageView als Teil Ihrer StateListDrawables aussehen.

+0

@mreichelt: Sie könnten auch mit einem Blick mehr wie folgt aussehen: http://blog.tomgibara.com/post/2149115454/dynamic-android-texture – CommonsWare

+0

Also anstelle eines 'ImageButton' habe ich ein' ImageView 'weil ich ein benutzerdefiniertes Bild als anklickbaren Bereich verwende. Wenn diese ImageView angeklickt wird, sollte oben eine Blende erscheinen, die größer als das erste Bild ist. Wie Sie sagten, könnte ich eine StateListDrawable als Hintergrund verwenden, aber das erscheint natürlich im Hintergrund. Es sollte die Eingabeereignisse nicht erhalten, auch wenn es oben ist, da es weder anklickbar noch fokussierbar ist. Ich könnte einen Workaround mit 2 ImageViews machen (das Flare oben), aber das würde die View-Hierarchie vergrößern. Eine benutzerdefinierte Ansicht ist auch nicht so wünschenswert für diesen IMHO gemeinsamen Anwendungsfall ... – mreichelt

Verwandte Themen