Ich habe eine Schaltfläche erstellt und möchte dieser Schaltfläche einen Welleneffekt hinzufügen!
Ich habe eine Schaltfläche bg XML-Datei erstellt: (bg_btn.xml)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient android:startColor="#FFFFFF" android:endColor="#00FF00" android:angle="270" />
<corners android:radius="3dp" />
<stroke android:width="5px" android:color="#000000" />
</shape>
Und das ist meine Ripple-Effekt-Datei: (ripple_bg.xml)
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="#f816a463"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#f816a463" />
</shape>
</item>
</ripple>
Und dies ist mein Button, den ich mit einem Welleneffekt versehen möchte:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_centerHorizontal="true"
android:layout_marginTop="173dp"
android:textColor="#fff"
android:background="@drawable/ripple_bg"
android:clickable="true" />
Nach dem Hinzufügen des Ripple-Effekts ist der Hintergrund der Schaltfläche transparent und die Schaltfläche wird nur angezeigt, wenn Sie darauf klicken:
Vor dem Klicken
On Click
Aber ich brauche sowohl die Hintergrundfarbe der Schaltfläche als auch den Welleneffekt. Ich habe einen Teil dieses Codes in verschiedenen Blogs von Stack Overflow gefunden, aber es funktioniert immer noch nicht!
l
oderm
zum Bildlink hinzufügen . (siehe meine Bearbeitung)Antworten:
Hier ist eine weitere zeichnbare XML für diejenigen, die den Verlaufshintergrund, den Eckenradius und den Welligkeitseffekt addieren möchten:
Fügen Sie dies zum Hintergrund Ihrer Schaltfläche hinzu.
quelle
ripple
.Fügen
"?attr/selectableItemBackground"
Sie dasandroid:foreground
Attribut Ihrer Ansicht hinzu , wenn es bereits einen Hintergrund zusammen mit hatandroid:clickable="true"
.quelle
tools:ignore="UnusedAttribute
).?android:attr/selectableItemBackground
(android:attr
anstelle vonattr
)android:foreground
Attribut hat keine Auswirkung auf API-Level unter 23Fügen Sie einem Android-Button Ripple-Effekt / Animation hinzu
Ersetzen Sie einfach Ihr Button-Hintergrundattribut durch android: background = "? Attr / selectableItemBackground" und Ihr Code sieht so aus.
Eine andere Möglichkeit, einem Android-Button Ripple-Effekt / Animation hinzuzufügen
Mit dieser Methode können Sie die Farbe des Welleneffekts anpassen. Zuerst müssen Sie eine XML-Datei in Ihrem Zeichenressourcenverzeichnis erstellen. Erstellen Sie eine Datei ripple_effect.xml und fügen Sie den folgenden Code hinzu. res / drawable / ripple_effect.xml
Und setzen Sie den Hintergrund der Schaltfläche auf die obige Zeichnungsressourcendatei
quelle
Fügen Sie diese zusätzlich zur Lösung von Jigar Patel zur Datei ripple.xml hinzu , um einen transparenten Hintergrund der Schaltflächen zu vermeiden.
Komplette XML :
Verwenden Sie diese ripple.xml als Hintergrund für Ihre Schaltfläche:
quelle
<item android:id="@android:id/mask"> [...]
. Es sei denn, Sie möchten eine ovale Maske. Danke für deine Antwort!Wenn die Schaltfläche einen Hintergrund aus dem Zeichen hat, können wir dem Vordergrundparameter einen Welleneffekt hinzufügen. Überprüfen Sie den folgenden Code, ob er für meine Schaltfläche mit einem anderen Hintergrund funktioniert
Fügen Sie den folgenden Parameter für den Welligkeitseffekt hinzu
Als Referenz siehe unten Link https://jascode.wordpress.com/2017/11/11/how-to-add-ripple-effect-to-an-android-app/
quelle
AppCompat v7 +
Sie sollten
"?android:attr/selectableItemBackground"
oder verwenden"?android:attr/selectableItemBackgroundBorderless"
, je nach Ihren Vorlieben. Ich bevorzugeBorderless
.Sie können es entweder in
android:background
oderandroid:foreground
um vorhandene Eigenschaften beizubehalten.Das Element muss
android:clickable="true"
undandroid:focusable="true"
um dafür zu arbeiten, aber viele Elemente, wie Knöpfe, haben sietrue
standardmäßig aktiviert .Programmatisch (Java)
Programmatisch (Kotlin)
Wiederverwendbare Kotlin-Erweiterungsfunktion
quelle
Das Hinzufügen von Vordergrund- und anklickbaren Attributen hat bei mir funktioniert.
quelle
Neben Sudheesh R.
quelle
Wenn Sie android: background verwenden, ersetzen Sie einen Großteil des Stils und des Erscheinungsbilds einer Schaltfläche durch eine leere Farbe.
Update: Ab Version 23.0.0 von AppCompat gibt es ein neues Widget.AppCompat.Button.Ein farbiger Stil, der den colorButtonNormal Ihres Themas für die deaktivierte Farbe und colorAccent für die aktivierte Farbe verwendet.
Auf diese Weise können Sie es direkt über auf Ihre Schaltfläche anwenden
Sie können ein Drawable in Ihrem v21-Verzeichnis für Ihren Hintergrund verwenden, z.
Dadurch wird sichergestellt, dass Ihre Hintergrundfarbe "attr / colorPrimary" ist und die Standard-Ripple-Animation mit dem Standard "attr / colorControlHighlight" verwendet wird (das Sie auch in Ihrem Design festlegen können, wenn Sie möchten).
Hinweis: Sie müssen einen benutzerdefinierten Selektor für weniger als v21 erstellen:
quelle
Versuche dies
quelle
Ein einfacher Ansatz besteht darin, ein Ansichtsthema wie hier beschrieben festzulegen .
some_view.xml
some_style.xml
quelle
Benutz einfach :
Anstatt:
Vergiss nicht, deine
Button
zu ändernandroid.support.v7.widget.AppCompatButton
quelle
Eine alternative Lösung zur Verwendung des
<ripple>
Tags (die ich persönlich lieber nicht mache, da die Farben nicht "Standard" sind) ist die folgende:Erstellen Sie ein Zeichen für den Schaltflächenhintergrund und fügen Sie es
<item android:drawable="?attr/selectableItemBackground">
in die ein<layer-list>
Dann (und ich denke, das ist der wichtige Teil) programmgesteuert
backgroundResource(R.drawable.custom_button)
auf Ihre Schaltflächeninstanz setzen.Aktivität / Fragment
Layout
custom_button.xml
quelle