Essayer de faire quelque chose de vraiment simple ici et avoir cherché un tas de ressources SO, mais en vain. J'essaie d'obtenir l'effet d'entraînement sur un bouton qui utilise un arrière-plan drawable
de type shape drawable
. Les fichiers pertinents:
background_button:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<stroke
Android:width="1px"
Android:color="#80ffffff" />
<solid Android:color="@Android:color/transparent" />
</shape>
ripple.xml dans le dossier drawable-v21
:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="?attr/colorControlHighlight">
<item Android:drawable="@drawable/background_button"/>
</ripple>
Button.xml:
<Button
Android:id="@+id/login_button"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="20dp"
Android:layout_weight="1"
Android:paddingTop="10dp"
Android:paddingBottom="10dp"
Android:background="@drawable/ripple"
/>
Quel est le problème ici. Merci!
Mon conseil serait de ne pas utiliser la balise <ripple
. J'ai deux raisons: il n'est pas si facile de faire exactement ce que vous voulez et vous devez disposer de 2 fichiers .xml
différents pour chaque arrière-plan. Je n'aime pas avoir le dossier drawable-v21
.
Ma solution consiste à envelopper votre Button
avec FrameLayout
et à utiliser l'attribut Android:foreground
. De cette façon, vous pouvez avoir l’arrière-plan que vous voulez et conserver l’effet d’ondulation.
<FrameLayout
Android:id="@+id/login_button"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="20dp"
Android:layout_weight="1"
Android:paddingTop="10dp"
Android:paddingBottom="10dp"
Android:foreground="?attr/selectableItemBackground">
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/background_button"/>
</FrameLayout>
Notez que j'ai déplacé tous les attributs et l'id sur FrameLayout
. Vous devez définir onClickListener
à FrameLayout
au lieu de Button
.
Btw, ?attr/selectableItemBackground
est génial. Utilisez-le autant que possible. Il remplace la couleur bleue Holo par le gris pour les anciens appareils d'Android 4.0 à 4.3.
Essaye ça.
ripple_effect.xml
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:color="#2797e0"
tools:targetApi="Lollipop">
<item Android:id="@Android:id/mask">
<shape Android:shape="rectangle">
<solid Android:color="#2797e0" />
</shape>
</item>
button.xml
<Button
Android:id="@+id/login_button"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="20dp"
Android:layout_weight="1"
Android:paddingTop="10dp"
Android:paddingBottom="10dp"
Android:background="@drawable/ripple_effect"/>
build.gradle
compile 'com.Android.support:appcompat-v7:23.1.1'
ça marche pour moi drawable/rect.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:id="@+id/listview_background_shape">
<stroke Android:width="1dp" Android:color="#FF4C71F5" />
<padding Android:left="0dp"
Android:top="0dp"
Android:right="0dp"
Android:bottom="0dp" />
<corners Android:radius="5dp" />
<solid Android:color="#00000000" />
</shape>
et pour ondulation drawable/rip.xml
<?xml version="1.0" encoding="utf-8"?>
<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>
et pour votre bouton
<Button
Android:id="@+id/nm"
Android:layout_width="80dp"
Android:layout_height="40dp"
Android:layout_weight="1"
Android:background="@drawable/rect"
Android:enabled="true"
Android:text="@string/vnm"
Android:textColor="@color/colorpr"
Android:textStyle="bold"
Android:foreground="@drawable/rip"/>
espérons que cette aide !!!
Ce travail pour moi ..
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:color="@color/smooth_white"
tools:targetApi="Lollipop">
<item Android:drawable="@drawable/button_green_background" />
<item Android:id="@Android:id/mask">
<shape Android:shape="rectangle">
<solid Android:color="@color/smooth_white" />
</shape>
</item>
</ripple>
Le point est la section
<item Android:drawable="@drawable/button_green_background" />
J'ai eu la même tâche. Laissez-moi vous expliquer comment je le résous. Il génère des images d'image de cercle avec des effets d'ombre et d'ondes ne dépassant pas les limites du cercle.
<ImageView
Android:id="@+id/iv_undo"
Android:layout_width="@dimen/iv_width_altmenu"
Android:layout_height="@dimen/iv_height_altmenu"
Android:src="@drawable/undo"
Android:elevation="@dimen/elevation_buttons"
Android:foreground="@drawable/ripple_effect"
Android:background="@drawable/buttons_inactive_coloring"
/>
Ce qui suit fournit un effet d'entraînement:
Android:foreground="@drawable/ripple_effect"
Ce qui suit fournit circle imageView.
Android:background="@drawable/buttons_inactive_coloring"
Les éléments suivants fournissent une ombre:
Android:foreground="@drawable/ripple_effect"
Un autre problème auquel vous serez probablement confronté est que l’effet d’ondulation dépasse les limites du cercle. Pour résoudre, utilisez le fichier suivant (ripple_effect.xml)
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:color="@color/button_active"
tools:targetApi="Lollipop">
<item Android:id="@Android:id/mask">
<shape Android:shape="oval">
<solid Android:color="@color/button_active" />
</shape>
</item>
</ripple>
Si vous n'utilisez pas les éléments suivants:
<item Android:id="@Android:id/mask">
<shape Android:shape="oval">
<solid Android:color="@color/button_active" />
</shape>
</item>
l’effet d’ondulation dépasse les limites du cercle et n’a pas l’air agréable. Soyez prudent et prenez les choses faciles.
Solution plus simple - utiliser ce drawable-xml en tant que valeur de la propriété "Android: background" du bouton:
drawable/bkg_ripple.xml:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="?attr/colorControlHighlight">
<item Android:drawable="?attr/colorPrimary"/>
<item Android:id="@Android:id/mask">
<shape Android:shape="rectangle">
<solid Android:color="#000000" />
</shape>
</item>
</ripple>
button.xml:
<Button
Android:id="@+id/mybutton"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
...
Android:background="@drawable/bkg_ripple"
/>
CA aidera
<com.abcd.ripplebutton.widget.RippleButton
Android:id="@+id/Summit"
Android:layout_width="260dp"
Android:layout_height="50dp"
Android:text="Login"
Android:textColor="@color/white"
Android:textStyle="bold"
app:buttonColor="@color/Button"
app:rippleColor="@color/white" />
Pour plus Voir ceci