Wenn ich in Android das Hintergrundbild auf "Schaltfläche" setze, kann ich keine Auswirkung auf die Schaltfläche sehen.
Ich brauche einen Effekt auf die Schaltfläche, damit der Benutzer erkennen kann, dass auf die Schaltfläche geklickt wird.
Die Schaltfläche sollte einige Sekunden lang dunkel sein, wenn sie angeklickt wurde. Was soll ich also tun?
Vielen Dank.
Antworten:
Dies kann erreicht werden, indem eine zeichnbare XML-Datei erstellt wird, die eine Liste der Status für die Schaltfläche enthält. Wenn Sie beispielsweise eine neue XML-Datei mit dem Namen "button.xml" mit dem folgenden Code erstellen:
Um das Hintergrundbild mit einem abgedunkelten Erscheinungsbild beim Drücken beizubehalten, erstellen Sie eine zweite XML-Datei und nennen Sie sie gradient.xml mit dem folgenden Code:
Stellen Sie im XML Ihrer Schaltfläche den Hintergrund als Schaltflächen-XML ein, z
Hoffe das hilft!
Bearbeiten: Der obige Code wurde geändert, um ein Bild (YOURIMAGE) in der Schaltfläche anstelle einer Blockfarbe anzuzeigen.
quelle
Es ist einfacher, wenn Sie viele Bildschaltflächen haben und nicht für jede Schaltfläche XML-s schreiben möchten.
Kotlin Version:
Java-Version:
quelle
Erstellen Sie Ihr
AlphaAnimation
Objekt, das entscheidet, wie stark der Fading-Effekt der Schaltfläche sein soll, und lassen Sie es dann in denonClickListener
Schaltflächen beginnenZum Beispiel :
Natürlich ist dies nur ein Weg, nicht der am meisten bevorzugte, es ist einfach einfacher
quelle
Sie können einfach Vordergrund verwenden für Ihre
View
klickbare Wirkung zu erzielen:Fügen Sie zur Verwendung mit einem dunklen Thema auch ein Thema zu Ihrem hinzu
layout
(um einen anklickbaren Effekt zu erzielen):quelle
Um Ihr Element mit dem Erscheinungsbild des Systems in Einklang zu bringen, verweisen Sie auf das Systemattribut
android:attr/selectableItemBackground
im Hintergrund- oder Vordergrund-Tag Ihrer gewünschten Ansicht:Verwenden Sie beide Attribute, um den gewünschten Effekt vor / nach API-Level 23 zu erzielen.
https://stackoverflow.com/a/11513474/4683601
quelle
Wenn Sie nur ein Hintergrundbild verwenden, können Sie den Klickeffekt mithilfe von erzielen
setOnTouchListener
Zwei Wege
Und wenn Sie nicht verwenden möchten
setOnTouchLister
ist der andere Weg, dies zu erreichenquelle
Ich möchte nur einen weiteren einfachen Weg hinzufügen, um dies zu tun: Wenn Ihr ImageButton seinen Hintergrund behält und Sie ihn nicht auf Null setzen, funktioniert er wie eine normale Schaltfläche und zeigt die Klickanimation an, während Sie genau wie andere Schaltflächen klicken der Hintergrund, solange er noch da ist:
Durch die Auffüllungen wird der Hintergrund nicht sichtbar und die Schaltfläche verhält sich wie andere Schaltflächen.
quelle
Dies ist die beste Lösung, die ich gefunden habe, um Hinweise aus der Antwort von @ Vinayak zu erhalten. Alle anderen Lösungen haben unterschiedliche Nachteile.
Erstellen Sie zunächst eine solche Funktion.
Erläuterung:
getConstantState (). newDrawable () wird verwendet, um das vorhandene Drawable zu klonen, andernfalls wird dasselbe Drawable verwendet. Lesen Sie hier mehr: Android: Klonen eines Drawable, um ein StateListDrawable mit Filtern zu erstellen
mutate () wird verwendet, um den Drawable-Klon dazu zu bringen, seinen Status nicht mit anderen Instanzen von Drawable zu teilen. Lesen Sie hier mehr darüber: https://developer.android.com/reference/android/graphics/drawable/Drawable.html#mutate ()
Verwendung:
Sie können jede Art von Ansicht (Button, ImageButton, View usw.) als Parameter an die Funktion übergeben, und sie erhalten den auf sie angewendeten Klickeffekt.
quelle
quelle
Verwenden Sie RippleDrawable für den Status "Material Design".
Um dies zu erreichen, erstellen Sie ein Ripple-Element als XML-Ordner unter / drawable und verwenden Sie es in android: background für alle Ansichten.
Effekt für gedrücktes / geklicktes Symbol. Verwenden Sie den kreisförmigen Welleneffekt, zum Beispiel:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray" />
Effekt für die Ansicht, auf die mit einer Rechteckgrenze geklickt wird, können wir eine Welligkeit über das vorhandene Zeichenelement wie unten hinzufügen:
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#000000"> <item android:drawable="@drawable/your_background_drawable"/> </ripple>
quelle
Für alle Ansichten
android:background="?android:attr/selectableItemBackground"
Aber für Kartenansicht, die Höhenverwendung hat
android:foreground="?android:attr/selectableItemBackground"
Für kreisförmigen Klickeffekt wie in der Symbolleiste
Auch müssen Sie einstellen
quelle
Eine kleine Ergänzung zu Andrs Antwort:
Sie können verwenden
postDelayed
, um den Farbfilter für einen kurzen Zeitraum haltbar zu machen, damit er besser sichtbar wird:Sie können den Wert der Verzögerung 100L an Ihre Bedürfnisse anpassen.
quelle
Wenn Sie XML-Hintergrund anstelle von IMG verwenden, entfernen Sie einfach Folgendes:
von der ersten Antwort, die @Ljdawson uns gab.
quelle